在 IEquatable 实现中需要进行引用检查

2024-01-01

我有一个实现的类IEquatable<T>。是否需要进行背景调查Equals()还是在框架中得到了照顾?

class Foo : IEquatable<Foo>
{
    int value;
    Bar system;

    bool Equals(Foo other)
    {
        return this == other || 
        ( value == other.value && system.Equals(other.system) );
    }
}

在上面的例子中是this==other声明是多余的还是必要的?

Update 1

我知道我需要更正代码,如下所示:

    bool Equals(Foo other)
    {
        if( other==null ) { return false; }
        if( object.ReferenceEquals(this, other) ) { return true; } //avoid recursion
        return value == other.value && system.Equals(other.system);
    }

感谢您的回复。


这通常是一种优化 - 这会很奇怪Equals如果没有它,实施就会失败。因此我会not认为这是必要的,但也没有“在框架内得到照顾”。 I 是一种成本低廉的优化,因此通常值得包含。

请注意,如果您是also超载==,那么你可能应该使用object.ReferenceEquals来执行这些比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 IEquatable 实现中需要进行引用检查 的相关文章

随机推荐

  • 使用 Thread.Start 与 QueueUserWorkItem 的优点

    在多线程 NET 编程中 使用 ThreadPool QueueUserWorkItem 与通过 new Thread 和 Thread Start 启动我自己的线程的决策标准是什么 在服务器应用程序 比如说 ASP NET 应用程序或 W
  • Safari 移动设备上的 填充错误?

    这类似于 也未回答 问题 3430506 https stackoverflow com questions 3430506 但适用于输入标签而不是 HTML5 元素 在 按钮上 iPhone 移动 Safari 浏览器会向左侧和右侧添加填
  • 在 Google 表格的一组数据中添加空白行

    我有一组数据 我期待的是在每组 3 个值之后添加 2 个空白行 如下所示 希望得到帮助来解决这个问题 您可以在这里找到示例谷歌表 https docs google com spreadsheets d 11nMvUWn3xcTfxlk4v
  • 如何使用 toBuffer 使用 [node]graphicsmagick 创建新图像

    我正在尝试创建一个新图像 该图像最终将通过 gridfs 插入到 mongo 数据库中 我宁愿避免向文件系统写入任何内容 所以最好的路线似乎是创建一个新图像 https github com aheckmann gm basic usage
  • HTML-CSS 覆盖层以居中元素覆盖整个页面

    I want to create a simple full screen overlay with loader and text in the center I have some problems with the text I wa
  • 在ant编译中包含JAR文件

    我想编译一些 java文件放入 JAR 中 我想在另一个应用程序中使用这个 JAR 文件 这是在第二个应用程序中使用第一个应用程序中的函数的好方法吗 我的目标是不重复代码 我怎样才能编辑build xml为第二个应用程序创建包含我创建的 J
  • 使用 pywinauto 自动化点击开始按钮

    我是 python pywinauto 的新手 我想自动执行一个简单的步骤 即单击 Windows 开始按钮打开控制面板并选择管理工具 最后想检查该复选框是否已选中 我陷入了如何单击 Windows 开始按钮的第一步 from pywina
  • jQuery datepicker 获取显示的月份和年份不是当前的

    我试图在点击日期选择器标题左侧和右侧的 下一个 和 上一个 链接后获取 显示的 月份和年份 目前我正在使用获取月份 var selectedMonth calendar datepicker getDate getMonth 1 但它只返回
  • 将多个工作簿中的数据复制并粘贴到另一个工作簿中的一个工作表

    我希望你能帮忙 我目前有一段代码 请参见下文 我希望它做的是允许用户选择包含工作簿的文件夹 然后打开每个工作簿 从每个工作簿中选择一个名为 SearchCaseResults 的工作表 将每个 SearchCaseResults 中的数据从
  • 显示从 MySQL 填充数据集的进度

    我目前正在使用 C 和 MySQL 数据库后端开发一个应用程序 我的程序最终可能会从数据库加载大量数据并添加到数据集中以在 DataGridView 中显示 我希望能够显示数据集填充的进度 但不确定如何获取它在数据库中位置的引用 下面是我目
  • 从 NuGetV3 API 获取包

    我有兴趣使用非 NET 语言为 NuGet v3 API 编写客户端库 获取包裹需要哪些请求 响应是什么样的 i e 获取 包版本 获取 包版本 您还可以链接到涵盖此场景的官方文档吗 Here https learn microsoft c
  • python中有strncpy()等价的函数吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 python中C语言的strncpy 有等价的函数吗 我想用第一个字符串替换第二个字符串中的 6 个字符 美妙 应改为 美丽 下面是C中的
  • 使用 Google 地图 API 或任何其他方式进行旅行推销员

    我有一个地址列表 需要找到到达每个地址并返回起点的最佳路线 我认为使用 Google Maps API 可以用 8 个路径点来计算 但 8 个路径点不足以满足我的目的 有没有人提供超过 8 个航点的路线优化 我的意思是一定有 对吗 这是许多
  • win32com + Excel + Django + Apache = 问题

    我在 Web 应用程序中打开 Excel 文档时遇到一些问题 在 Apache mod wsgi Windows 2008 Server 下运行 没有 当应用程序在 django 开发服务器上运行时出现问题 一个线程 My code def
  • 单击播放按钮时,YouTube 视频在 webView 中显示黑屏

    我尝试了这个 但它不起作用 webView getSettings setJavaScriptEnabled true webView loadUrl String valueOf https techx pk youtube videos
  • 如何配置播放框架以将我的工件存储库用于所有依赖项?

    我正在尝试添加一个本地 Maven 存储库 该存储库是我使用用于缓存 Maven 存储库的神器设置的 继依赖指令 http www playframework org documentation 1 2 3 dependency我已经找到了
  • 平衡二叉搜索树

    我需要构建一个平衡二叉搜索树 到目前为止 我的程序插入了从 1 到 26 的数字 但我的程序没有将其构建成平衡二叉搜索树 如果有人可以查看我的代码并帮助我 我将不胜感激 public class TreeNode TreeNode left
  • 如何在 UML 类图中显示私有继承关系

    在 C 中 由于私有继承不被视为is a关系 它应该如何在类图中显示以及是否显示为has a那么如何区分组合和私有继承呢 它应该是一个组合关系 子类一侧的实心黑色菱形 因为 私有继承的意思是 根据 实现 但在这方面它可以简单地视为与 具有
  • Solr 查询过滤文档,数组中至少有一个值(指定值除外)

    有没有一种方法可以过滤查询 这样我将获得具有特定数组字段的文档 其中包含除我传递的值之外的至少一个其他值 例如我有 3 个文档
  • 在 IEquatable 实现中需要进行引用检查

    我有一个实现的类IEquatable