首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"ReferenceEquals(myObject,null)“比"myObject == null”更好吗?

"ReferenceEquals(myObject,null)“比"myObject == null”更好吗?
EN

Stack Overflow用户
提问于 2012-09-18 03:33:44
回答 10查看 18.4K关注 0票数 52

我有一个同事,他喜欢这样写他的空检查:

代码语言:javascript
复制
if (!ReferenceEquals(myObject, null))

另一方面,我发现这种语法读起来很麻烦,我更喜欢:

代码语言:javascript
复制
if (myObject != null)

我找到了一些文章和堆栈溢出问题,讨论了ReferenceEquals在操作符重载方面的优点,但在操作符重载场景之外,ReferenceEquals和==有什么好处吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-09-18 03:36:10

但是在操作符重载的情况下,ReferenceEquals和==有什么好处吗?

不-显式使用Object.ReferenceEquals的唯一好处(我认为这不是什么好处)是它永远不会使用重载操作符equals。在非重载的情况下,对于所有“字符串以外的引用类型”,== Operator被定义为“如果它的两个操作数引用相同的对象,则返回true”。因此,它的等价物(如果它不超载的话)。

我个人也倾向于使用第二种语法,并且发现它对于null检查更容易维护。我还认为,任何重载的operator==也应该针对null提供适当的检查,如果由于某种原因(这会很奇怪)而没有提供适当的检查,那么这个决定背后可能会有一个特定的理由,这会导致您想要使用重载,而不是ReferenceEquals

票数 50
EN

Stack Overflow用户

发布于 2017-11-11 08:44:56

在c# 7中,您可以使用:

代码语言:javascript
复制
if ( !(myObject is null) )

它相当于

代码语言:javascript
复制
if (!ReferenceEquals(myObject, null))
票数 35
EN

Stack Overflow用户

发布于 2012-09-18 03:38:00

好吧,如果有人要覆盖==或!=操作符,他们可以让它们做任何他们想做的事情。他们甚至可以让它做一些真正意义上的事情,比如return true;return false;。此外,如果有一个重载的运算符,它很有可能不会像ReferenceEquals那样执行得很好(不能保证,而且可能还不够重要,但仍然如此)。

话虽如此,因为对于任何重载运算符的任何合理实现,这不太可能是一个问题。我个人不使用ReferenceEquals,除非我有令人信服的理由不对该类型或在特定实例中使用==运算符。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12465961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档