除非类专门覆盖为 Object 定义的行为, ReferenceEquals 和 == 做同样的事情...比较参考文献。

在属性设置器中,我通常使用以下模式

private MyType myProperty;

public MyType MyProperty
{
    set
    {
        if (myProperty != value)
        {
            myProperty = value;
            // Do stuff like NotifyPropertyChanged
        }
    }
}

但是,在实体框架生成的代码中, if 语句被替换为

    if (!ReferenceEquals(myProperty, value))

使用 ReferenceEquals 更加明确(因为我猜不是所有 C# 程序员都知道 == 如果不被重写的话会做同样的事情)。

我没有注意到这两个 if 变体之间有什么区别吗?他们是否可能考虑到 POCO 设计者可能已经覆盖的可能性 ==?

简而言之,如果我没有重写 ==, ,我是否使用 != 而不是保存 ReferenceEquals()?

有帮助吗?

解决方案

以下是不同的语义:

  • ReferenceEquals() 如果您的意思是对象完全相同(身份检查),则必须使用。
  • object.Equals() 如果您的意思是对象具有相同的值(相等检查),则应使用
  • ==() 只能用于不可变类型。然后用它来测试相等性。

当然,相反的对应物也是相应的意思。

这是一个总结

其他提示

== 应该测试引用是否指向相同的位置,而 ReferenceEquals 应该测试它们是否包含相同的数据

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top