字典:使用不同但相同的实例作为键查找相同的值

时间:2015-06-18 09:29:49

标签: c# dictionary

是否可以通过方便的方式从字典中获取以下行为:

Dictionary<MyObject, double> d = new Dictionary<MyObject, double>
MyObject foo = new MyObject("foo");
d[foo] = 1.0;

Console.Write(d[new MyObject("foo")]) ---> 1.0

示例已简化,我使用稍微复杂的Object作为键。

使用MyObject编辑替换的字符串

1 个答案:

答案 0 :(得分:2)

是的,只要您的密钥的相应Equals()方法返回true,并且GetHashCode()为您所称的different but identical instances返回相同的整数值,就有可能

在您的示例中,结果为1.0,因为String.Equals比较字符串的内容,而不是引用(尽管,确切地说,示例中的引用很可能也是相同的,因为编译器通常池相同字符串)。 编辑:本段适用于原始问题,其中OP使用string作为关键。

如果对键使用自定义类,只需覆盖其Equals方法即可实现所需的行为。不要忘记覆盖GetHashCode()以及有效的字典查找,请参阅此内容以获取推理:Why is it important to override GetHashCode when Equals method is overridden?