我应该允许不对称相等吗

本文关键字:不对称 我应该 | 更新日期: 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。在列表中,xyz表示不为null的对象引用。

  • CCD_ 8返回与CCD_ 9相同的值

任何使用Equals的东西都应该能够依赖于它——因此违反它可能会产生一些非常奇怪的效果。想象一下,如果Dictionary<,>.ContainsKey调用key.Equals(candidateEntry.Key),但索引器调用candidateEntry.Key.Equals(key)。。。您可能会看到一个键存在,但无法获取该条目。。。反之亦然。或者,它可能在Dictionary<,>的一个实现中起作用,但在后续版本中不起作用(或者在Mono等上不起作用)。