重载operator ==并与null进行比较

时间:2011-02-19 20:35:31

标签: c# operator-overloading

我有一个重载operator==的类来比较两个对象,但是当我针对null检查该类型的对象时,我在第一个参数上得到一个空引用异常。我想知道我应该如何防范这种情况,还是有另一种方法来实现这个operator==

Card c;

if (c == null) { // do something }  //null check throws exception cause c1 in operator has is a null object...

 public static bool operator ==(Card c1, Card c2)
        {
            if (ReferenceEquals(c1, null) )
                return false; // this does not make sense either I guess??
            return c1.Equals(c2);
        }

2 个答案:

答案 0 :(得分:15)

ReferenceEquals检查应该这样做;实际上,一条厚颜无耻的路线可以是:

if(((object)c1) == ((object)c2)) return true;
if(((object)c1) == null || ((object)c2) == null) return false;
return c1.Equals(c2);

(object)强制转换基本上是NOP,只是强制它执行引用检查而不是递归命中==,但也没有对ReferenceEquals进行额外的静态调用。

答案 1 :(得分:4)

See these guidelines 从该页面:

  

重载的operator ==实现不应该抛出异常。