使用 ReferenceEquals 的 IEqualityComparer

2023-11-27

有默认的吗IEqualityComparer<T>使用的实现ReferenceEquals?

EqualityComparer<T>.Default使用 ObjectComparer,它使用object.Equals()。就我而言,对象已经实现了IEquatable<T>,我需要忽略它并仅通过对象的引用进行比较。


以防万一没有默认实现,这是我自己的:

280Z28 编辑:使用的理由RuntimeHelpers.GetHashCode(object),你们中的许多人可能以前没有见过。 :) 这个方法有两个效果,使其成为correct呼吁实施:

  1. 当对象为空时,它返回 0。自从ReferenceEquals适用于空参数,比较器的 GetHashCode() 实现也应该如此。
  2. 它调用Object.GetHashCode()非虚拟。ReferenceEquals特别忽略任何覆盖Equals,所以 GetHashCode() 的实现应该使用与 ReferenceEquals 效果相匹配的特殊方法,这正是 RuntimeHelpers.GetHashCode 的用途。

[280Z28结束]

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

/// <summary>
/// A generic object comparerer that would only use object's reference, 
/// ignoring any <see cref="IEquatable{T}"/> or <see cref="object.Equals(object)"/>  overrides.
/// </summary>
public class ObjectReferenceEqualityComparer<T> : EqualityComparer<T>
    where T : class
{
    private static IEqualityComparer<T> _defaultComparer;

    public new static IEqualityComparer<T> Default
    {
        get { return _defaultComparer ?? (_defaultComparer = new ObjectReferenceEqualityComparer<T>()); }
    }

    #region IEqualityComparer<T> Members

    public override bool Equals(T x, T y)
    {
        return ReferenceEquals(x, y);
    }

    public override int GetHashCode(T obj)
    {
        return RuntimeHelpers.GetHashCode(obj);
    }

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

使用 ReferenceEquals 的 IEqualityComparer 的相关文章

随机推荐

  • 如何实现可取消的事件?

    在 System ComponentModel 中 有一个名为 CancelEventArgs 的类 其中包含可以在事件侦听器中设置的 Cancel 成员 MSDN 上的文档解释了如何使用它来取消侦听器内的事件 但如何使用它来实现我自己的可
  • 如何在 Windows 应用程序中启用常用控件

    我正在尝试在应用程序中启用通用控件 我按照中给出的步骤进行操作这篇 MSDN 文章 特别是该部分在仅使用标准扩展的应用程序中使用 ComCtl32 dll 版本 6 但我无法让它发挥作用 我做的唯一与本文不同的事情是我将清单信息添加到项目属
  • UIViewController viewDidLoad 宽度/高度不正确

    每个人都知道你不能相信 UIViewController init viewDidLoad 方法上的帧大小 这 void viewDidLoad NSLog d self view frame size width 在很多情况下会打印错误的
  • Spring Reactive 使用 ServerRequest 获取正文 JSONObject

    我是春季反应新手 我正在尝试使用邮递员从服务器获取请求信息 首先 postman使用post方法向服务器发送信息 其次 我们一直在服务器端编写相关代码并获取请求信息 在下面的代码片段中 我想知道是否可以获取ServerRequest函数的J
  • 隐藏命令行上的输入

    我知道像 Git 和其他这样的命令行界面能够隐藏用户的输入 对密码很有用 有没有办法在 Java 中以编程方式执行此操作 我正在从用户那里获取密码输入 我希望他们的输入 隐藏 在该特定行上 但不是所有行上 这是我的代码 尽管我怀疑它会有帮助
  • 如何使用高阶函数求对角线的总和?

    考虑以下二维数组 let array 11 2 4 4 5 6 10 8 12 我想要得到的是对角线的总和 As firstDiagnal 11 5 12 4 As secondDiagnal 4 5 10 19 我可以使用标准来实现它fo
  • 使用 Gunicorn 服务时 Flask 超时

    我有一个可以将音频文件转换为文本的应用程序 使用烧瓶和烧瓶插座 当我使用 python run py 运行它时 它工作得很好 但是当我使用 gunicorn k eventlet b 0 0 0 0 5000 run app 运行它时 它将
  • 如何使对话框(视图)在与主窗口相同的监视器上打开

    在具有多个显示器的 PC 中 假设您运行的应用程序除了主窗口 例如选项 之外还有第二个窗口 对话框 您希望它在与您的计算机相同的屏幕 显示器中打开MainWindow 如何强制这种行为 你基本上想要阻止你的场景MainWindow在一台显示
  • git 是否需要存在于服务器上才能使用它?

    当我开始使用 git 时 我的同事告诉我的最显着的好处之一是git 不需要出现在服务器上反对svn 但这真的是真的吗 在另一个线程我读到至少有一个git upload pack or git receive pack将是必要的 另一方面 我
  • 如何在使用 Chrome 浏览器的 Selenium Web 驱动程序执行自动化测试时绕过 NTLM 身份验证弹出窗口?

    我使用以下 python 代码绕过 NTLM 弹出窗口 chromedriver webdriver Chrome executable path chromedriver path chrome options options chrom
  • maxItemsInObjectGraph 被忽略

    我的 WCF 服务出现问题 该服务尝试序列化过多的数据 从跟踪中我收到一个错误 指出可以序列化或反序列化的最大元素数为 65536 请尝试增加 MaxItemsInObjectGraph 配额 所以我去修改了这个值 但它只是被忽略了 错误是
  • 创建自定义 PSObject PowerShell 2.0

    是否可以创建一个自定义对象 PSObject 并在程序执行之前和之后定义其属性 我们不断向该对象添加值数组 For e g c c New Object PSObject c Add Member type NoteProperty nam
  • emacs 字符串插入矩形数字向量?

    如何使用 emacs string insert rectangle 操作将数字向量添加到一系列行中 例如 我的 emacs 缓冲区中有一堆文本条目的缩短版本 element01 8 1111111110110100001000000011
  • C++、OpenCV:调整大小时断言失败

    作为一名 C 初学者 我目前面临着一个我无法解决的问题 即使代码非常简单 我一直在寻找answers互联网上到处都是 但没有一个适用于我的问题 我目前正在 VS2013 下使用 OpenCV 2 4 8 用 C 编写基本的 SVM 我能够处
  • OpenSSL::SSL::SSLContext SNI servername_cb 不工作

    正如中所引用的OpenSSL X509 证书显示错误域名的证书 我需要使用 TLSv1 或更高版本and 服务器名称指示扩大 即使ssl version and servername cb通过设置SSLContext 我仍然收到错误的证书m
  • 动态创建一个继承自ActiveRecord的类?

    我希望能够动态创建继承自 ActiveRecord 的类 以便在 Rails 应用程序外部编写脚本 我被困在这样的事情上 require active record def create arec table name Class new
  • 如何在graphql和strapi中传递JSON对象

    当我手动编写突变查询 在 graphql 插件中 时 它正在工作 mutation createExam input data name myName desription ggg questions gf hello time 2 sub
  • Java Web 服务返回带有 > 和 < 而不是 > 和 < 的字符串

    我有一个返回字符串的 java web 服务 我正在创建这个 xml 字符串的主体DocumentBuilder and Document班级 当我查看返回的 XML 源 在浏览器窗口中看起来很好 而不是 时 它返回 lt and gt 围
  • Git 类似于 Hg 的 Bigfiles 扩展?

    我想要 git 中类似的东西Mercurial 的 Bigfiles 扩展 注 据我所知git 大文件 但这无关 基本上我想在我的 git 存储库中存储大型二进制文件 但我不想在进行克隆时获得大型二进制文件的每个版本 我只想在签出包含这些大
  • 使用 ReferenceEquals 的 IEqualityComparer

    有默认的吗IEqualityComparer