3

除非一个类专门覆盖了为 Object 定义的行为,ReferenceEquals 和 == 做同样的事情……比较引用。

在属性设置器中,我常用的模式

private MyType myProperty;

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

但是,在 Entity Framework 生成的代码中,该if语句被替换为

    if (!ReferenceEquals(myProperty, value))

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

两个 if 变体之间有什么区别让我无法理解吗?他们是否可能解释了 POCO 设计师可能已经覆盖的可能性==

简而言之,如果我没有覆盖==,我是否使用 != 而不是ReferenceEquals()?

4

2 回答 2

5

以下是不同的语义:

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

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

这是一个摘要

于 2010-06-14T05:35:42.133 回答
-3

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

于 2010-06-14T05:26:26.267 回答