我有一个同事,他喜欢写下他的空检查,如下所示:
if (!ReferenceEquals(myObject, null))
Run Code Online (Sandbox Code Playgroud)
另一方面,我觉得这种语法很难阅读并且更喜欢:
if (myObject != null)
Run Code Online (Sandbox Code Playgroud)
我发现一些文章和堆栈溢出问题讨论了关于运算符重载的ReferenceEquals的优点,但是在运算符重载方案之外,ReferenceEquals vs ==有什么好处?
Ree*_*sey 40
但是在运算符重载方案之外,ReferenceEquals与==有什么好处?
不 - 明确使用的唯一优势(并且我认为它没有多大优势)Object.ReferenceEquals将永远不会使用重载运算符equals.在非重载的情况下,==运算符被定义为"如果它的两个操作数引用同一个对象",则返回"对于除"字符串以外的所有"引用类型".因此,它的等价物(假设它没有超载).
我个人也赞成使用第二种语法,并发现它对于空检查更易于维护.我还要争辩说,任何超载operator==都应该提供适当的检查null,如果它没有出于某种原因(这将是奇怪的),那么这个决定背后可能会有一个特定的理由导致你想要使用过载,而不是ReferenceEquals.
Ber*_*rdV 31
使用c#7,您可以使用:
if ( !(myObject is null) )
Run Code Online (Sandbox Code Playgroud)
它相当于
if (!ReferenceEquals(myObject, null))
Run Code Online (Sandbox Code Playgroud)
好吧,如果有人要覆盖==或!=运算符,他们可以让他们做任何他们想做的事情.该甚至可以把它做一些真正的意思是像return true;或return false;.另外,如果有一个重载的运算符,它有一个不太好的机会,它不会表现得好ReferenceEquals(不保证,它可能不够重要,但仍然).
话虽如此,由于任何重载运算符的任何合理实现,这根本不是问题.我个人不使用,ReferenceEquals除非我有令人信服的理由不在==该类型或特定情况下使用运算符.
| 归档时间: |
|
| 查看次数: |
13058 次 |
| 最近记录: |