Rei*_*l-- 8 c# wildcard hashcode iequatable
假设我希望能够比较2个整数列表并将一个特定值视为外卡.
例如,如果-1是外卡,那么
{1,2,3,4} == {1,2,-1,4} //returns true
我正在编写一个类来包装所有这些逻辑,因此它实现IEquatable并具有相关的逻辑public override bool Equals()
但是,GetHashCode如果你压倒一切,我一直认为你或多或少必须实施.Equals().虽然它没有被编译器强制执行,但我一直认为如果你不这样做那么你做错了.
除非我不知道如何在.GetHashCode()不破坏合同的情况下实现(Equal的对象具有不同的哈希值),或者只是执行实现return 1.
思考?
这种实现Equals已经无效,因为它不具有传递性.您可能应该Equals使用默认实现,并编写一个新方法WildcardEquals(如此处的其他答案中所示).
通常,只要您已经更改Equals,就必须实现,GetHashCode如果您希望能够将对象存储在哈希表(例如a Dictionary<TKey, TValue>)中并使其正常工作.如果你肯定知道对象永远不会在哈希表中结束,那么它在理论上是可选的(但是在这种情况下更安全和更清楚地覆盖它以抛出" NotSupportedException"或总是返回0).
GetHashCode如果你覆盖Equals,一般契约总是要实现,因为你不能总是事先确定后来的用户不会把你的对象放在哈希表中.
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |