【发布时间】:2012-09-10 01:33:29
【问题描述】:
我有一位同事喜欢编写如下的空检查:
if (!ReferenceEquals(myObject, null))
另一方面,我觉得这种语法阅读起来很麻烦,而且更喜欢:
if (myObject != null)
我发现一些文章和堆栈溢出问题讨论了 ReferenceEquals 在运算符重载方面的优点,但在运算符重载场景之外,ReferenceEquals 与 == 有什么好处?
【问题讨论】:
-
值得注意的是,您朋友的版本可读性较差(当支票可以互换时,这会成为一个问题,通常是这样)。
-
另外 - 比上面更糟糕 - 你必须输入
if (!Object.ReferenceEquals(myObject, null))- 所以它比实际描述的还要长。 -
@ReedCopsey 不,您不必键入,因为您的方法位于从其(直接或间接)基类
System.Object继承静态ReferenceEquals方法的类或结构中.所以按照上面的写法是可以的(用new方法隐藏继承的方法当然可能会发生,但这是一个邪恶的例外)。 -
@ReedCopsey 好吧,您可以轻松判断
ReferenceEquals是否隐藏(或者定义了另一个匹配的重载)。但是,如果要遵循您的理念,可以说global::System.Object.ReferenceEquals(myObject, null),因为假设 somone 定义了其他类型或命名空间,称为Object和System... -
@JeppeStigNielsen 或者只使用“object.Ref..”作为语言定义的。不过,我个人的理念是使用 == :)