我有一个同事,他喜欢这样写他的空检查:
if (!ReferenceEquals(myObject, null))另一方面,我发现这种语法读起来很麻烦,我更喜欢:
if (myObject != null)我找到了一些文章和堆栈溢出问题,讨论了ReferenceEquals在操作符重载方面的优点,但在操作符重载场景之外,ReferenceEquals和==有什么好处吗?
发布于 2012-09-18 03:36:10
但是在操作符重载的情况下,ReferenceEquals和==有什么好处吗?
不-显式使用Object.ReferenceEquals的唯一好处(我认为这不是什么好处)是它永远不会使用重载操作符equals。在非重载的情况下,对于所有“字符串以外的引用类型”,== Operator被定义为“如果它的两个操作数引用相同的对象,则返回true”。因此,它的等价物(如果它不超载的话)。
我个人也倾向于使用第二种语法,并且发现它对于null检查更容易维护。我还认为,任何重载的operator==也应该针对null提供适当的检查,如果由于某种原因(这会很奇怪)而没有提供适当的检查,那么这个决定背后可能会有一个特定的理由,这会导致您想要使用重载,而不是ReferenceEquals。
发布于 2017-11-11 08:44:56
在c# 7中,您可以使用:
if ( !(myObject is null) )它相当于
if (!ReferenceEquals(myObject, null))发布于 2012-09-18 03:38:00
好吧,如果有人要覆盖==或!=操作符,他们可以让它们做任何他们想做的事情。他们甚至可以让它做一些真正意义上的事情,比如return true;或return false;。此外,如果有一个重载的运算符,它很有可能不会像ReferenceEquals那样执行得很好(不能保证,而且可能还不够重要,但仍然如此)。
话虽如此,因为对于任何重载运算符的任何合理实现,这不太可能是一个问题。我个人不使用ReferenceEquals,除非我有令人信服的理由不对该类型或在特定实例中使用==运算符。
https://stackoverflow.com/questions/12465961
复制相似问题