Ton*_*ion 4 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);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 15
该ReferenceEquals检查应该这样做; 实际上,一条厚脸皮的路线可以是:
if(((object)c1) == ((object)c2)) return true;
if(((object)c1) == null || ((object)c2) == null) return false;
return c1.Equals(c2);
Run Code Online (Sandbox Code Playgroud)
该(object)铸件基本上是NOP,且只是迫使其进行参考检查,而不是递归打==,也没有额外的静态调用ReferenceEquals.