如何在 C# 中可靠地检查空值,包括重载运算符==
和!=
?
class MyClass
{
public static bool operator ==(MyClass a, MyClass b) { return false; }
public static bool operator !=(MyClass a, MyClass b) { return true; }
}
class Program {
static void Main(string[] args) {
MyClass x = new MyClass();
MyClass y = null;
if (x != null) { System.Console.WriteLine(x.ToString()); }
// Next line throws a NullReferenceException
if (y != null) { System.Console.WriteLine(y.ToString()); }
}
}
我知道以下选项可用:
x != null
重载运算符时不可靠。null != x
重载运算符时不可靠。(x ?? null) != null
类型仍然是MyClass
,因此在重载运算符时不可靠。object.ReferenceEquals(x, null)
应该可以。x.Equals(null)
不会工作(当然,因为我们调用了一个方法 onx
,它可以是null
)object o = x; o != null
应该使用object
'soperator !=
,所以它应该可以工作。- 还有什么?
那么,就可靠性、速度、可读性而言,哪种方法最好,哪种方法最惯用呢?Microsoft 是否在其文档/编码标准/其他内容中推荐任何方法?