Как преобразовать словарь <> в Hashtable в С#?

Я вижу много вопросов/ответов о том, как преобразовать Hashtable в словарь, но как я могу преобразовать словарь в Hashtable?

Ответ 1

Самый простой способ - использовать конструктор Hashtable:

        var dictionary = new Dictionary<object, object>();
        //... fill the dictionary
        var hashtable = new Hashtable(dictionary);

Ответ 2

Dictionary<int, string> dictionary = new Dictionary<int, string>
   {
      {1,"One"},
      {2,"Two"}
   };
Hashtable hashtable = new Hashtable(dictionary);

Попробуйте это

Ответ 3

Кажется, очень редко хочется делать, но простейшим:

var hash = new Hashtable();
foreach(var pair in dictionary) {
    hash.Add(pair.Key,pair.Value);
}

(при условии, что нет необычных "проверок проверки типизации, а не проверки нетипизированного равенства" и т.д.)

Ответ 4

Возможно, вы захотите использовать перегрузку конструктора Hashtable, которая принимает параметр IEqualityComparer:

var hashtable = new Hashtable(dictionary, (IEqualityComparer) dictionary.Comparer); 

Таким образом, ваш Hashtable использует тот же Comparer, что и словарь. Например, если ваш словарь использовал строковый ключ без учета регистра, вам может потребоваться, чтобы ваш Hashtable тоже не учитывал регистр. Например:.

var d = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
d.Add("a", "a");
d.Add("b", "b");

bool found;
found = d.ContainsKey("A"); // true

var hashtable1 = new Hashtable(d);
var hashtable2 = new Hashtable(d, (IEqualityComparer) d.Comparer);

found = hashtable1["A"] != null; // false - by default it case-sensitive

found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary