这种方式使用ReferenceEquals是否正确

时间:2017-03-21 22:31:40

标签: c# referenceequals

我正在进行一些代码审查,并且我停止了以下构造。这是使用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
}

2 个答案:

答案 0 :(得分:1)

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

  

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

了解详情here

Reference equality of value types

答案 1 :(得分:0)

ReferenceEquals Method - MSDN

  

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