C# 没有专用的引用相等运算符,而且不能重载,这一点一直困扰着我。为了测试引用是否为空,我想编写这样的代码:
if (thing == null)
但总是有这样一个挥之不去的想法:“如果类重载了 == 运算符怎么办?”。我对类是否认为该对象等于 null 不感兴趣。我感兴趣的是对象 reference 是否为空。替代方案似乎正在转向反对:
if ((object)thing == null)
和 Object.ReferenceEquals():
if (Object.ReferenceEquals(thing, null)) // long form
if (ReferenceEquals(thing, null)) // short form
有没有一种方法可以检查 null 而不必担心
==
是否在 C# 中被覆盖?
与
if (thing is object)
...
你混淆了你想做的事情 - 检查
null
。目前这对你来说可能是显而易见和干净的,但几个月后可能就不会了(假设你已经放弃了这种做法),而且对其其他人来说肯定“不”明显。如果我遇到这种情况,我会很困惑作者的意图。如果您需要评论来解释您所做的事情……请不要这样做。 (当然,在某些情况下您可以而且应该这样做,但绝对不是像 null
检查这样简单的事情。)最终你会降低你的代码的可维护性,因为理解你的代码总是需要仔细考虑。帮自己一个忙,让你的代码尽可能干净,这意味着诚实地表达你的意图。
如果您追求简洁,那么扩展方法可能是您最好的选择。
public static class NullExtensions
{
public static bool ExactlyNull(this object toCheck)
{
return ReferenceEquals(toCheck, null);
}
}
ReferenceEquals
。使用这样的扩展方法往往会
降低可维护性,并且通常会导致某些工具(例如 Resharper)提供不太有用的“建议”。