问题标签 [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.
.net - IEqualityComparer有容忍度;如何实现GetHashCode?
我正在实现一个可重用的 DoubleEqualityComparer(具有自定义容差:“epsilon”构造函数参数),以简化 LINQ 与双序列的使用。例如:
实现 GetHashCode 的正确方法是什么?这是代码:
PS:我总是可以返回相同的值(例如:GetHashCode(double obj){ return 0; }) 总是强制调用 Equals(double, double) 方法(我知道不是很高效),但我记得这个当比较器与字典一起使用时,解决方案会导致问题......
c# - 使用 lambda 表达式指定相等性
我想比较 2 个集合。其中一个是 a List<string>
,另一个是 a List<Book>
。Book 有一个 Isbn 类型的属性string
,我想写这样的东西:
我想在方法中指定相等性。是否可以 ?或者我应该强制创建一个实现 IEqualityComparer 接口的 BookComparer 吗?
问候,
弗洛里安
c# - 实现 IEqualityComparer用于比较任何类(包括匿名)的任意属性
我正在编写这个实现 IEqualityComparer 的简洁类,这样我就可以将任何匿名类型传递给它(或者实际上是任何具有属性的类型),它会通过比较类型的属性值来自动比较类型。
我认为这是一个很好的小助手功能,我可以多次使用。
为了使用它,我必须这样做:
很公平,但是我该如何处理它返回的 obj 变量呢?
distinct 扩展函数的重载不接受这个,因为它看不到 IEqualityComparer 类型,当然它只看到一个对象。
这也行不通。找不到类型/命名空间(红色下划线)。
我该如何直截了当?
c# - 获取列表中具有最高属性值的不同项目
我有一个对象 AppDetail,其中包含 2 个字符串属性、一个名称和一个版本字符串(例如“1.0.0”)
给定一个 List<AppDetail> 包含相同名称但不同版本字符串的重复项,如何创建具有唯一名称和最高版本的 List?
例如,从初始列表中的这两项
我希望唯一项目列表仅包含第二项,因为它具有最高版本。
要比较版本,我需要创建一个创建 Version 对象的 IComparer,然后使用 version.CompareTo(version) 方法。但这没有用,因为List.Distinct 重载只接受 IEqualityComparer,而不接受 IComparer。
有什么想法吗?谢谢
c# - 基于c#中的子数组过滤数组中的重复项
我有一个包含基本代码和一系列位置的人员列表。我需要消除列表中具有相同位置的不同基码的人员,并保留具有不同位置的人员。
我尝试使用 IEqualityComparer,并在 linq 中分组,但我没有成功。你们能告诉我怎么做吗?这是我的班级结构
数据示例
我想从我的列表中过滤掉第 2 个人并保留第 1 个人和第 3 个人。请指教
.net - KeyedCollection 字符串不区分大小写
尝试按照文档进行操作,但我无法使其工作。有一个带有密钥字符串的 KeyedCollection。
如何在 KeyedCollection 中使字符串键不区分大小写?
在 Dictionary 上,可以只在 ctor 中传递 StringComparer.OrdinalIgnoreCase。
c# - 在泛型方法中检查非类约束类型参数的实例是否为空
我目前有一个通用方法,我想在处理参数之前对参数进行一些验证。具体来说,如果类型参数的实例T
是引用类型,我想检查它是否为空,如果为空则null
抛出一个ArgumentNullException
。
类似于以下内容:
请注意,我不希望使用class
约束来约束我的类型参数。
我想我可以使用Marc Gravell关于“如何将泛型类型与其默认值进行比较?”的回答。,并像这样使用EqualityComparer<T>
类:
但它在调用时给出了一个非常模棱两可的错误Equals
:
成员 'object.Equals(object, object)' 不能通过实例引用访问;改为使用类型名称来限定它
如何检查T
不受值或引用类型约束null
的实例?T
c# - 多个 ref 类型字段上的 LINQ GroupBy;自定义 EqualityComparer
因此,我在 SO 和其他地方浏览了大约 20 个关于此的示例,但没有找到一个涵盖我正在尝试做的事情。这 -我可以指定我的显式类型比较器内联吗?- 看起来像我需要的,但还不够远(或者我不明白如何更进一步)。
- 我有一个 LoadData 列表,LoadData 对象具有引用类型和值类型的字段
- 需要对 ref 和 value 字段的混合进行分组,将输出投影到匿名类型
需要(我认为)提供自定义 IEqualityComparer 来指定如何比较 GroupBy 字段,但它们是匿名类型
/li>
到目前为止,我使用的最好的 GroupBy 查询:
这组,但仍有重复。
- 如何指定自定义代码来比较 GroupBy 字段?例如,组件可以通过 Component.Code 进行比较。
c# - 我必须实现哪些接口才能创建列表或字典连接两个值作为键
我需要使我的自定义对象在字典、列表等中正常工作......这样我就可以更改对象的属性,并允许它被使用,而不是孤立。
上次我尝试覆盖 GetHashCode() 时,当我将对象添加到字典时,我孤立了对象,对对象进行了更改(更改了 GetHashCode),这以某种方式导致字典无法正确地从内存中处理对象。
问题
有人可以解释一下:
我需要在 TrustedEntityReference 中覆盖哪些接口和接口才能连接
int
并TrustedEntity
在排序字典中正常工作?对于 .NET 字典对象中使用的内容,哪些值决不能更改,否则会冒着孤立对象的风险?(例如,更改对象发出的哈希码可能会导致字典出现 GC 问题)
这是我正在处理的当前示例对象。
c# - 处理子/超类时覆盖 Equals(object obj) 的正确方法?
我正在使用以下代码来测试 Equals
如果 obj 是一个超类,我应该如何处理它?它应该总是返回假,还是有时它应该是真的?
我该如何进行比较?