如何在C#中将Dictionary 转换为Hashtable?

我看到很多关于如何将Hashtable转换为Dictionary的问题/答案,但是如何将Dictionary转换为Hashtable?

最简单的方法是使用Hashtable的构造函数:

  var dictionary = new Dictionary(); //... fill the dictionary var hashtable = new Hashtable(dictionary); 
 Dictionary dictionary = new Dictionary { {1,"One"}, {2,"Two"} }; Hashtable hashtable = new Hashtable(dictionary); 

试试这个

似乎很少有人想做,但最简单的是:

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

(假设没有exception的“实现类型化的等式检查但不进行无类型的等式检查”等)

您可能需要考虑使用带有IEqualityComparer参数的Hashtable构造函数重载:

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

这样,您的Hashtable使用与字典相同的Comparer 。 例如,如果您的字典使用了不区分大小写的字符串键,那么您可能希望Hashtable也不区分大小写。 例如:

 var d = new Dictionary(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's case-sensitive found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary