我正在为字典创建一个键,它是两个字符串的结构。当我在控制台应用程序中测试此方法时,它有效,但我不确定它有效的唯一原因是否是因为字符串被驻留并因此具有相同的引用。
Foo foo1 = new Foo();
Foo foo2 = new Foo();
foo1.Key1 = "abc";
foo2.Key1 = "abc";
foo1.Key2 = "def";
foo2.Key2 = "def";
Dictionary<Foo, string> bar = new Dictionary<Foo, string>();
bar.Add(foo1, "found");
if(bar.ContainsKey(foo2))
System.Console.WriteLine("This works.");
else
System.Console.WriteLine("Does not work");
结构很简单:
public struct Foo
{
public string Key1;
public string Key2;
}
是否有任何情况会导致此操作失败,或者我是否可以将其作为唯一 key ?
最佳答案
根据 Microsoft 的文档,如果您打算使用自己的数据结构作为哈希表中的键,您应该始终重写 GetHashCode(),否则您可能不安全。
“在 Hashtable 对象中用作键的对象也必须覆盖 GetHashCode 方法,因为这些对象必须生成自己的哈希码。”
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
关于c# - 此代码是否依赖于字符串实习才能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147992/