如何转换字典<&燃气轮机;要在C#中创建哈希表?

如何转换字典<&燃气轮机;要在C#中创建哈希表?,c#,.net,C#,.net,我看到了很多关于如何将哈希表转换为字典的问题/答案,但如何将字典转换为哈希表?似乎很少有人想这样做,但最简单的是: var hash = new Hashtable(); foreach(var pair in dictionary) { hash.Add(pair.Key,pair.Value); } (假设没有异常的“实现类型相等检查,但不实现非类型相等检查”等)Dictionary Dictionary=new Dictionary { {1,“一”}, {2,“两个”} };

我看到了很多关于如何将哈希表转换为字典的问题/答案,但如何将字典转换为哈希表?

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

var hash = new Hashtable();
foreach(var pair in dictionary) {
    hash.Add(pair.Key,pair.Value);
}
(假设没有异常的“实现类型相等检查,但不实现非类型相等检查”等)

Dictionary Dictionary=new Dictionary
{
{1,“一”},
{2,“两个”}
};
Hashtable Hashtable=新的Hashtable(字典);

试试这个

最简单的方法是使用哈希表的构造函数:

        var dictionary = new Dictionary<object, object>();
        //... fill the dictionary
        var hashtable = new Hashtable(dictionary);
var dictionary=newdictionary();
//... 查字典
var hashtable=新的hashtable(字典);

< /代码> 您可能需要考虑使用<代码>哈希表< /COD>构造函数重载,采用<代码> IEqualityComparer < /C> >参数:

var hashtable = new Hashtable(dictionary, (IEqualityComparer) dictionary.Comparer); 
这样,哈希表使用与字典相同的
比较器。例如,如果您的字典使用了不区分大小写的字符串键,您可能希望您的
哈希表也不区分大小写。例如:

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's case-sensitive

found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary
var d=新字典(StringComparer.OrdinalIgnoreCase);
d、 添加(“a”、“a”);
d、 添加(“b”、“b”);
布尔发现;
found=d.ContainsKey(“A”);//真的
var hashtable1=新的Hashtable(d);
var hashtable2=新的Hashtable(d,(IEqualityComparer)d.Comparer);
found=哈希表1[“A”]!=空;//false-默认情况下,它区分大小写
已找到=哈希表2[“A”]!=空;//true-使用与原始词典相同的比较器

您为什么需要它?哈希表非常具体,因为在键上计算的值生成值的位置。。。字典只是一个直接的(键、值)集合。为什么要将字典转换为哈希表?最简单的说,我很懒。Hashtable
类型的对象在很多地方都被使用。这本身并不是使用它的理由。字典和哈希表是在不同情况下使用的不同工具。你知道,很多地方也使用列表。。。那么为什么不使用它呢-s@RoyDictus:字典只是一个通用哈希表。它也有同样的用途。@RoyDictus如果我不想通过所有的代码来使用字典,那么我就有理由使用它。现在只需将它包含在
ToHashTable
扩展方法中,瞧!甚至还有一个能做同样的事情,这就是我想做的。我想知道是否有一种不那么明显的方法可以做到这一点。不过,谢谢你!
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's case-sensitive

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