我应该覆盖== for object和MyType吗?

时间:2017-01-30 10:40:33

标签: c#

我有一个名为struct的{​​{1}}来实现MyType

我已经实施了IEquatable<MyType>,但是我是否应该针对下面的情况实施operator ==(MyType x, MyType y)

例如:

operator ==(MyType x, object y)

用法:

public static bool operator ==(MyType x, object y)
{
    if (y is MyType)
    {
        return x == (MyType)y;
    }

    return false;
}

1 个答案:

答案 0 :(得分:1)

据我所知,没有CTS类型可以做到这一点。好的例子包括 Decimal DateTime ,它们只对各自的类型实现相等,而不是它们的基类型或接口。

此外,此实现可能会鼓励将几乎任何类型与您的结构,甚至其他结构进行比较,并且将来可能会使用您的代码的人可能会认为将 MyType MyOtherType进行比较可能有意义,而它所做的只是装箱另一种类型,然后返回假。另外,人们通常会将Beacon data (01000444) Beacon data (01000466) Beacon data (01000001) Beacon data (01000468) Beacon data (01000004) Beacon data (01000006) Beacon data (01000003) 上的==解释为参考平等。

  

此外,您应该重载 op_Equality op_Inequality 运算符。这可确保所有相等测试都返回一致的结果。

documentation不会告诉您应该重载哪些相等运算符,而第二句实际上可以用objectMyType == object一致的条件来解释。但是,没有.NET类型实际上这样做并且导致混淆的事实足以说它不是一个好的做法。

如果可以将其他类型视为 MyType ,则重载显式或隐式强制转换。

相关问题