如何在没有无限递归的'=='运算符重载中检查空值?

如何在没有无限递归的'=='运算符重载中检查空值?

以下将导致==运算符重载方法的无限递归

    Foo foo1 = null;
    Foo foo2 = new Foo();
    Assert.IsFalse(foo1 == foo2);

    public static bool operator ==(Foo foo1, Foo foo2) {
        if (foo1 == null) return foo2 == null;
        return foo1.Equals(foo2);
    }

我如何检查空值?


ibeautiful
浏览 441回答 3
3回答

万千封印

用途ReferenceEquals:Foo foo1 = null;Foo foo2 = new Foo();Assert.IsFalse(foo1 == foo2);public static bool operator ==(Foo foo1, Foo foo2) {     if (object.ReferenceEquals(null, foo1))         return object.ReferenceEquals(null, foo2);     return foo1.Equals(foo2);}

慕仙森

在重载方法中转换为对象:public static bool operator ==(Foo foo1, Foo foo2) {     if ((object) foo1 == null) return (object) foo2 == null;     return foo1.Equals(foo2);}
打开App,查看更多内容
随时随地看视频慕课网APP