是否可以通过方便的方式从字典中获取以下行为:
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编辑替换的字符串
答案 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?