实体框架 4 中的 !(ReferenceEquals()) 与 !=
-
27-09-2019 - |
题
除非类专门覆盖为 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 应该测试它们是否包含相同的数据
不隶属于 StackOverflow