微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用随机缺失的属性覆盖 GetHashCode

如何解决使用随机缺失的属性覆盖 GetHashCode

我有基于自定义类的字典。我在继承 IEquatable 接口时面临覆盖 GetHashCode() 的问题。我的类对象具有三个属性

  1. Id1(字符串)
  2. Id2(字符串)
  3. Id3(字符串)

我正在从两个不同的来源检索数据,并根据上述自定义类从这些集合中创建字典。在某些情况下,一个数据源填充了上述 id 中的两个,而另一个数据源只填充了一个 id。例如,

Collection1 = {Object{Id1 = null,Id2 = "NewId2",Id3 = "NewId3"}}

Collection2 = {Object{Id1 = null,Id2 = null,Id3 = "NewId3"}}

也有在collection2中Id3为null但Id2不为null的情况。对于这种情况,我不确定如何覆盖 GetHashCode()。我已经尝试过 if-elseif-else 块,但在某些边缘情况下此逻辑会失败:

if (Id3 != null)
{
   return Id3.GetHashCode();
}
else if (Id2 != null) {
   return Id2.GetHashCode();
}
else {
   return Id1.GetHashCode();
}

在我的情况下似乎没有特定的顺序。对于更多上下文,我尝试使用 .NET 字典中的 TryGetValue 方法。我查看了源代码,发现他们在那里使用 GetHashCode() 来按键搜索,这就是我通过错误跟踪到此函数的方式。有人知道解决这个问题的方法吗?

编辑:添加一些示例以阐明正确的行为

Example 1

Object1 = Object1{Id1 = null,Id2 = "K2",Id3 = "K3"};
Object2 = Object2{Id1 = null,Id3 = "K3"};

Answer: object1 == object2 because Id3 matches
Example 2

Object1 = Object1{Id1 = null,Id3 = null};

Answer: object1 == object2 because Id2 matches
Example 3

Object1 = Object1{Id1 = "K1",Id3 = "K3"};
Object2 = Object2{Id1 = "K1",Id3 = null};

Answer: object1 == object2 because Id1 matches

Edit2:当两个对象之间的 id 至少相等时,就会发生匹配。 为便于讨论,假设以下哈希码映射,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。