问题标签 [iequalitycomparer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2159 浏览

.net - IEqualityComparer有容忍度;如何实现GetHashCode?

我正在实现一个可重用的 DoubleEqualityComparer(具有自定义容差:“epsilon”构造函数参数),以简化 LINQ 与双序列的使用。例如:

实现 GetHashCode 的正确方法是什么?这是代码:

PS:我总是可以返回相同的值(例如:GetHashCode(double obj){ return 0; }) 总是强制调用 Equals(double, double) 方法(我知道不是很高效),但我记得这个当比较器与字典一起使用时,解决方案会导致问题......

0 投票
2 回答
945 浏览

c# - 使用 lambda 表达式指定相等性

我想比较 2 个集合。其中一个是 a List<string>,另一个是 a List<Book>。Book 有一个 Isbn 类型的属性string,我想写这样的东西:

我想在方法中指定相等性。是否可以 ?或者我应该强制创建一个实现 IEqualityComparer 接口的 BookComparer 吗?

问候,

弗洛里安

0 投票
2 回答
6667 浏览

c# - 实现 IEqualityComparer用于比较任何类(包括匿名)的任意属性

我正在编写这个实现 IEqualityComparer 的简洁类,这样我就可以将任何匿名类型传递给它(或者实际上是任何具有属性的类型),它会通过比较类型的属性值来自动比较类型。

我认为这是一个很好的小助手功能,我可以多次使用。

为了使用它,我必须这样做:

很公平,但是我该如何处理它返回的 obj 变量呢?

distinct 扩展函数的重载不接受这个,因为它看不到 IEqualityComparer 类型,当然它只看到一个对象。

这也行不通。找不到类型/命名空间(红色下划线)。

我该如何直截了当?

0 投票
3 回答
1404 浏览

c# - 获取列表中具有最高属性值的不同项目

我有一个对象 AppDetail,其中包含 2 个字符串属性、一个名称和一个版本字符串(例如“1.0.0”)

给定一个 List<AppDetail> 包含相同名称但不同版本字符串的重复项,如何创建具有唯一名称和最高版本的 List?

例如,从初始列表中的这两项

我希望唯一项目列表仅包含第二项,因为它具有最高版本。

要比较版本,我需要创建一个创建 Version 对象的 IComparer,然后使用 version.CompareTo(version) 方法。但这没有用,因为List.Distinct 重载只接受 IEqualityComparer,而不接受 IComparer。

有什么想法吗?谢谢

0 投票
4 回答
197 浏览

c# - 基于c#中的子数组过滤数组中的重复项

我有一个包含基本代码和一系列位置的人员列表。我需要消除列表中具有相同位置的不同基码的人员,并保留具有不同位置的人员。

我尝试使用 IEqualityComparer,并在 linq 中分组,但我没有成功。你们能告诉我怎么做吗?这是我的班级结构

数据示例

我想从我的列表中过滤掉第 2 个人并保留第 1 个人和第 3 个人。请指教

0 投票
1 回答
974 浏览

.net - KeyedCollection 字符串不区分大小写

尝试按照文档进行操作,但我无法使其工作。有一个带有密钥字符串的 KeyedCollection。

如何在 KeyedCollection 中使字符串键不区分大小写?

在 Dictionary 上,可以只在 ctor 中传递 StringComparer.OrdinalIgnoreCase。

0 投票
1 回答
1794 浏览

c# - 在泛型方法中检查非类约束类型参数的实例是否为空

我目前有一个通用方法,我想在处理参数之前对参数进行一些验证。具体来说,如果类型参数的实例T是引用类型,我想检查它是否为空,如果为空则null抛出一个ArgumentNullException

类似于以下内容:

请注意,我不希望使用class约束来约束我的类型参数。

我想我可以使用Marc Gravell关于“如何将泛型类型与其默认值进行比较?”的回答。,并像这样使用EqualityComparer<T>

但它在调用时给出了一个非常模棱两可的错误Equals

成员 'object.Equals(object, object)' 不能通过实例引用访问;改为使用类型名称来限定它

如何检查T不受值或引用类型约束null的实例?T

0 投票
2 回答
3601 浏览

c# - 多个 ref 类型字段上的 LINQ GroupBy;自定义 EqualityComparer

因此,我在 SO 和其他地方浏览了大约 20 个关于此的示例,但没有找到一个涵盖我正在尝试做的事情。这 -我可以指定我的显式类型比较器内联吗?- 看起来像我需要的,但还不够远(或者我不明白如何更进一步)。

  • 我有一个 LoadData 列表,LoadData 对象具有引用类型和值类型的字段
  • 需要对 ref 和 value 字段的混合进行分组,将输出投影到匿名类型
  • 需要(我认为)提供自定义 IEqualityComparer 来指定如何比较 GroupBy 字段,但它们是匿名类型

    /li>

到目前为止,我使用的最好的 GroupBy 查询:

这组,但仍有重复。

  1. 如何指定自定义代码来比较 GroupBy 字段?例如,组件可以通过 Component.Code 进行比较。
0 投票
3 回答
295 浏览

c# - 我必须实现哪些接口才能创建列表或字典连接两个值作为键

我需要使我的自定义对象在字典、列表等中正常工作......这样我就可以更改对象的属性,并允许它被使用,而不是孤立。

上次我尝试覆盖 GetHashCode() 时,当我将对象添加到字典时,我孤立了对象,对对象进行了更改(更改了 GetHashCode),这以某种方式导致字典无法正确地从内存中处理对象。

问题

有人可以解释一下:

  • 我需要在 TrustedEntityReference 中覆盖哪些接口和接口才能连接intTrustedEntity在排序字典中正常工作?

  • 对于 .NET 字典对象中使用的内容,哪些值决不能更改,否则会冒着孤立对象的风险?(例如,更改对象发出的哈希码可能会导致字典出现 GC 问题)

这是我正在处理的当前示例对象。

0 投票
3 回答
322 浏览

c# - 处理子/超类时覆盖 Equals(object obj) 的正确方法?

我正在使用以下代码来测试 Equals

如果 obj 是一个超类,我应该如何处理它?它应该总是返回假,还是有时它应该是真的?

我该如何进行比较?