正如微软所说,
operator ==的重载中的常见错误是使用(a == b),(a == null)或(b == null)来检查引用相等性.这反而导致调用重载的运算符==,导致无限循环.使用ReferenceEquals或将类型转换为Object,以避免循环.
所以使用ReferenceEquals(a,null)|| ReferenceEquals(b,null)是一种可能性,但是对象的转换同样好(实际上是等价的,我相信).
所以是的,似乎应该有更好的方法,但你使用的方法是推荐的方法.
但是,正如已经指出的那样,当覆盖==时,你真的应该重写Equals.LINQ提供程序使用不同的语言编写,并在运行时进行表达式解析,即使您自己拥有所有代码,谁知道什么时候您不会这样做.
正如微软所说,
operator ==的重载中的常见错误是使用(a == b),(a == null)或(b == null)来检查引用相等性.这反而导致调用重载的运算符==,导致无限循环.使用ReferenceEquals或将类型转换为Object,以避免循环.
所以使用ReferenceEquals(a,null)|| ReferenceEquals(b,null)是一种可能性,但是对象的转换同样好(实际上是等价的,我相信).
所以是的,似乎应该有更好的方法,但你使用的方法是推荐的方法.
但是,正如已经指出的那样,当覆盖==时,你真的应该重写Equals.LINQ提供程序使用不同的语言编写,并在运行时进行表达式解析,即使您自己拥有所有代码,谁知道什么时候您不会这样做.