如何在 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 是否在其文档/编码标准/其他内容中推荐任何方法?