1

我正在做一些代码审查,我停止了以下构造。这是ReferenceEquals检查方法是否返回与作为参数或新参数传递的对象相同的正确方法吗?

int x = 5;
Foo f = new Foo()

Foo DoSomething(Foo f)
{
    if(x > 5)
    {
         return f;
    }
    else
    {
        return new Foo();
    }
}

Foo ff = DoSomething(f);

if(Object.ReferenceEquals(ff, f))
{
    //do something
}
4

2 回答 2

1

是的参考类型。值类型有点复杂,因为它们在传递给方法之前被装箱。

比较值类型时。如果 objA 和 objB 是值类型,则在将它们传递给 ReferenceEquals 方法之前将它们装箱。这意味着如果 objA 和 objB 都代表一个值类型的同一个实例,ReferenceEquals 方法仍然返回 false,

在此处阅读更多详细信息

值类型的引用相等

于 2017-03-21T22:39:22.643 回答
0

ReferenceEquals 方法 - MSDN

与 Equals 方法和相等运算符不同,ReferenceEquals 方法不能被覆盖。因此,如果您想测试两个对象引用的相等性并且不确定 Equals 方法的实现,您可以调用 ReferenceEquals 方法。但是,请注意,如果 objA 和 objB 是值类型,则在将它们传递给 ReferenceEquals 方法之前将它们装箱。

于 2017-03-21T22:41:49.540 回答