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

本文关键字:查找 实例 字典 | 更新日期: 2023-09-27 17:56:50

是否可以以方便的方式从字典中实现以下行为:

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

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

编辑替换为 MyObject 的字符串

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

是的,这是可能的,只要你的键的相应Equals()方法返回true,并且GetHashCode()返回你称之为different but identical instances的相同整数值。

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

如果对键使用自定义类,只需重写其 Equals 方法即可实现所需的行为。不要忘记覆盖GetHashCode()以及高效的字典查找,请参阅以下内容以进行推理:为什么在覆盖等于方法时覆盖GetHashCode很重要?