当前位置:  开发笔记 > 编程语言 > 正文

编写equals运算符时处理null的最佳方法

如何解决《编写equals运算符时处理null的最佳方法》经验,为你挑选了1个好方法。

正如微软所说,

operator ==的重载中的常见错误是使用(a == b),(a == null)或(b == null)来检查引用相等性.这反而导致调用重载的运算符==,导致无限循环.使用ReferenceEquals或将类型转换为Object,以避免循环.

所以使用ReferenceEquals(a,null)|| ReferenceEquals(b,null)是一种可能性,但是对象的转换同样好(实际上是等价的,我相信).

所以是的,似乎应该有更好的方法,但你使用的方法是推荐的方法.

但是,正如已经指出的那样,当覆盖==时,你真的应该重写Equals.LINQ提供程序使用不同的语言编写,并在运行时进行表达式解析,即使您自己拥有所有代码,谁知道什么时候您不会这样做.



1> Philip Rieck..:

正如微软所说,

operator ==的重载中的常见错误是使用(a == b),(a == null)或(b == null)来检查引用相等性.这反而导致调用重载的运算符==,导致无限循环.使用ReferenceEquals或将类型转换为Object,以避免循环.

所以使用ReferenceEquals(a,null)|| ReferenceEquals(b,null)是一种可能性,但是对象的转换同样好(实际上是等价的,我相信).

所以是的,似乎应该有更好的方法,但你使用的方法是推荐的方法.

但是,正如已经指出的那样,当覆盖==时,你真的应该重写Equals.LINQ提供程序使用不同的语言编写,并在运行时进行表达式解析,即使您自己拥有所有代码,谁知道什么时候您不会这样做.


我想你误解了上面的ReferenceEquals调用.我只是用NULL来测试相等性,另外还要理解做一个实际的相等性检查.不要调用referenceequals来测试参数的相等性.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有