我有一个名为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;
}
答案 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不会告诉您应该重载哪些相等运算符,而第二句实际上可以用object
与MyType == object
一致的条件来解释。但是,没有.NET类型实际上这样做并且导致混淆的事实足以说它不是一个好的做法。
如果可以将其他类型视为 MyType ,则重载显式或隐式强制转换。