重载==运算符的最佳实践是什么,该运算符在涉及空引用比较时会比较同一类的两个实例?

MyObject o1 = null;
MyObject o2 = null;
if (o1 == o2) ...


static bool operator == (MyClass o1, MyClass o2)
{
  // ooops! this way leads toward recursion with stackoverflow as the result
  if (o1 == null && o2 == null)
    return true;

  // it works!
  if (Equals(o1, null) && Equals(o2, null))
    return true;

  ...
}

比较中处理空引用的最佳方法是什么?

最佳答案

我想知道是否有“最佳方法”。这是我的方法:

static bool operator == (MyClass o1, MyClass o2)
{
  if(object.ReferenceEquals(o1, o2)) // This handles if they're both null
      return true;                   // or if it's the same object

  if(object.ReferenceEquals(o1, null))
      return false;

  if(object.ReferenceEquals(o2, null)) // Is this necessary? See Gabe's comment
       return false;

  return o1.Equals(o2);

}

关于C#:在涉及空引用时重载==运算符的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4075760/

10-12 19:13