我应该允许不对称相等吗
本文关键字:不对称 我应该 | 更新日期: 2023-09-27 18:26:36
我有一个C#类型,将其与int进行相等性比较在逻辑上是有意义的。请将此类型称为Number
。
但是,我不能使Equals对称,因为我不能更改Int32.Equals(object other)
。那么,我应该允许不对称等式吗,比如:
Number numberThree = new Number(3);
int intThree = 3;
bool equal;
equal = numberThree.Equals(intThree); // equal is true
equal = intThree.Equals(numberThree); // equal is false
或者,如果类型和数值匹配,我应该只允许相等吗?
否。违反Object.Equals
:合同
以下语句对于
Equals(Object)
方法的所有实现都必须为true。在列表中,x
、y
和z
表示不为null的对象引用。
- CCD_ 8返回与CCD_ 9相同的值
任何使用Equals
的东西都应该能够依赖于它——因此违反它可能会产生一些非常奇怪的效果。想象一下,如果Dictionary<,>.ContainsKey
调用key.Equals(candidateEntry.Key)
,但索引器调用candidateEntry.Key.Equals(key)
。。。您可能会看到一个键存在,但无法获取该条目。。。反之亦然。或者,它可能在Dictionary<,>
的一个实现中起作用,但在后续版本中不起作用(或者在Mono等上不起作用)。