Geo*_*uer 7 c# equals operator-overloading
当我为对象重载==运算符时,我通常写这样的东西:
public static bool operator ==(MyObject uq1, MyObject uq2) {
if (((object)uq1 == null) || ((object)uq2 == null)) return false;
return uq1.Field1 == uq2.Field1 && uq1.Field2 == uq2.Field2;
}
Run Code Online (Sandbox Code Playgroud)
如果你没有向下转换为对象,那么函数可以自我复制,但我不得不怀疑是否有更好的方法?
正如微软所说,
operator ==的重载中的常见错误是使用(a == b),(a == null)或(b == null)来检查引用相等性.这反而导致调用重载的运算符==,导致无限循环.使用ReferenceEquals或将类型转换为Object,以避免循环.
所以使用ReferenceEquals(a,null)|| ReferenceEquals(b,null)是一种可能性,但是对象的转换同样好(实际上是等价的,我相信).
所以是的,似乎应该有更好的方法,但你使用的方法是推荐的方法.
但是,正如已经指出的那样,当覆盖==时,你真的应该重写Equals.LINQ提供程序使用不同的语言编写,并在运行时进行表达式解析,即使您自己拥有所有代码,谁知道什么时候您不会这样做.