我应该允许不对称平等吗?

时间:2014-10-15 08:47:23

标签: c# iequatable symmetric

我有一个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

或者,如果类型匹配以及数值,我应该只允许相等吗?

1 个答案:

答案 0 :(得分:5)

没有。它违反了Object.Equals

的合同
  

以下语句必须适用于Equals(Object)方法的所有实现。在列表中,xyz表示非空的对象引用。

     
      
  • ...
  •   
  • x.Equals(y)返回与y.Equals(x)相同的值。
  •   

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