【发布时间】:2021-11-21 15:12:49
【问题描述】:
小问题
如何为Array 实现GetHashCode。
详情
我有一个覆盖 Equals 的对象,检查:
this.array[n] == otherObject.array[n]
对于array 中的所有n。
当然我应该实现互补的GetHashCode。
我想知道是否有 .NET 方法可以做到这一点,或者我是否应该实现自己的方法,例如
hash = hash ^ array[n]
澄清
我的对象包含一个数组,我对数组元素的 GetHashCode 感兴趣。我的数组等价代码仅作为示例 - 就像我的问题所说但也许我不清楚,我对GetHashCode(不是Equals)感兴趣。我说我自然应该实现互补的GetHashCode,因为一旦Equals 被覆盖(Dictionary 等才能正常运行),.NET 就需要实现它。谢谢。
【问题讨论】:
-
查看here 发布的答案。换句话说,您最好实现自己的变体或使用其他工具,您不能将
GetHashCode()或Equals()用于数组 -
为什么不把
this.array[n].Equals(otherObject.array[n])换成n? -
如果要比较两个数组是否相等,可以使用
SequenceEqual扩展 -
@c z:请说明
array是否是您要覆盖其 Equals 和 GetHashCode 的对象中的一个字段。