首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceEquals()的合法使用

ReferenceEquals()的合法使用
EN

Stack Overflow用户
提问于 2012-03-28 23:38:46
回答 3查看 949关注 0票数 7

在遵循声明式风格编写的.NET程序中,ReferenceEquals()的一些合法用法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-28 23:41:01

我不知道你所说的“遵循声明风格”是什么意思,但是当覆盖==操作符时,通常会使用ReferenceEquals。来自http://msdn.microsoft.com/en-us/library/ms173147.aspx

代码语言:javascript
复制
public static bool operator ==(ThreeDPoint a, ThreeDPoint b)
{
    // If both are null, or both are same instance, return true.
    if (System.Object.ReferenceEquals(a, b))
    {
        return true;
    }

    // If one is null, but not both, return false.
    if (((object)a == null) || ((object)b == null))
    {
        return false;
    }

    // Return true if the fields match:
    return a.x == b.x && a.y == b.y && a.z == b.z;
}

有关理由,请参阅下面的注释,这很重要:

注意:运算符==重载中的一个常见错误是使用(a == b)、(a == null)或(b == null)检查引用是否相等。相反,这会创建对重载操作符==的调用,从而导致无限循环。使用ReferenceEquals或将类型强制转换为Object,以避免循环。

票数 12
EN

Stack Overflow用户

发布于 2012-03-28 23:45:20

在一个遵循声明式风格的.NET程序中,ReferenceEquals()的一些合法用法是什么?

无论程序是以什么“风格”编写的,只有一种合法的ReferenceEquals用法:比较两个引用是否相等。

如果您使用ReferenceEquals的目的不是比较两个引用是否相等,那么您可能做错了什么。

票数 11
EN

Stack Overflow用户

发布于 2012-03-28 23:42:15

好吧,如果相关对象的设计和/或用法是这样的,即任何对象的一个实例永远不会与任何其他对象“相等”,那么它将是正确的,而且它可能比比较一些实例变量更快。

或者,正如在另一个答案中发布的,您可以首先将其作为“简单输出”进行检查,如果它们不同,则只执行深度等于检查。这种用法只是性能上的提升。

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

https://stackoverflow.com/questions/9910996

复制
相关文章

相似问题

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