除非某个类特别覆盖了为Object定义的行为,否则ReferenceEquals and == do the same thing...比较参考文献。
在属性设置器中,我通常使用模式
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()进行保存
发布于 2010-06-14 13:35:42
以下是不同的语义:
如果表示对象完全相同,则必须使用
ReferenceEquals() (如果表示对象具有相同的值,则应使用identity check).object.Equals() (相等check)==()仅适用于不可变类型)。然后用它来测试相等性。当然,反转的对应物是相应的意思。
Here is a summary
发布于 2010-06-14 13:26:26
==应该测试引用是否指向相同的位置,而ReferenceEquals测试它们是否包含相同的数据
https://stackoverflow.com/questions/3035013
复制相似问题