首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >!(ReferenceEquals()) vs !=在实体框架4中

!(ReferenceEquals()) vs !=在实体框架4中
EN

Stack Overflow用户
提问于 2010-06-14 12:55:07
回答 2查看 573关注 0票数 3

除非某个类特别覆盖了为Object定义的行为,否则ReferenceEquals and == do the same thing...比较参考文献。

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

代码语言:javascript
复制
private MyType myProperty;

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

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

代码语言:javascript
复制
    if (!ReferenceEquals(myProperty, value))

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

这两个if变种之间有什么区别吗?它们是否考虑到POCO设计者可能已经超越了==

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-14 13:35:42

以下是不同的语义:

如果表示对象完全相同,则必须使用

  • ReferenceEquals() (如果表示对象具有相同的值,则应使用identity check).
  • object.Equals() (相等check)
  • ==()仅适用于不可变类型)。然后用它来测试相等性。

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

Here is a summary

票数 5
EN

Stack Overflow用户

发布于 2010-06-14 13:26:26

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

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3035013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档