问题标签 [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 投票
1 回答
341 浏览

dictionary - 二维数组的 IEqualityComparer 实例

F# 支持二维数组与=运算符的结构相等性,以及在 F# 集合(如Set. 但是如何在 .NET 类中使用相同的相等比较HashSet呢?默认情况下,它使用引用相等,尽管有一个构造函数采用IEqualityComparer<T>I 的实例,但无法找到适合二维数组的内置实例。

我看了看System.Collections.StructuralComparisons.StructuralEqualityComparer,但这似乎有两个问题。首先,它不是通用的,其次,它似乎不支持二维数组:

最终,我想修复以下代码,使其返回 1,而不是 2:

我也会对使用 的解决方案感到满意Dictionary,但我认为同样的问题也适用。

0 投票
2 回答
425 浏览

c# - 使用 IEqualityComparer 查找记录

我使用以下 IEqualityComparer 在比较之前从公司名称中去除特殊字符,如下所示:

为了在运行查询时调用它,我使用以下命令:

我将如何在 LINQ 查询中使用此比较器来查找与输入字符串(公司名称)匹配的所有记录?

例如:

因此,我不想使用 t1.Company_Name == name,而是使用相等比较器来包含特殊字符替换。

0 投票
1 回答
7404 浏览

c# - 长原语的 GetHashCode()

我正在为 LINQ 不同的表达式编写 EqualityComparer,但我不太确定 GetHashCode 重载方法。下面的代码是否正确?Id 属性是一个长原语。

0 投票
1 回答
461 浏览

.net - IEquatable(Of T)/IEqualityComparer(Of T) 未被调用

我有一些带有两个对象列表的代码。第一个列表比第二个列表更具包容性。我希望从第一个列表中排除第二个列表中的项目。经过一些研究,我发现扩展方法Except是做到这一点的方法。因此IEquatable(Of T)IEqualityComparer(Of T)我在我的代码中实现了这样的东西:

然后我像这样打一个简单的电话:

这行不通。这也不是:

但是,这确实有效:

既然RecentCustomersLocalCustomers都是List(Of CustomerData)为什么默认的比较方法不起作用?当我说它不起作用时,我的意思是我可以在EqualsandGetHashCode例程中放置断点,它们永远不会被击中,并且返回的列表与LocalCustomers.

0 投票
1 回答
274 浏览

c# - 子类 HashSet 以便在另一个集合中使用时始终使用某个 IEqualityComparer

我想子类化HashSet<Point>,以便每当我在另一个集合中使用它时它都HashSet<Point>.CreateSetComparer()用作一个。IEqualityComparer

基本上每次我这样做:

我希望它自动被视为:

根据这个问题

我目前手动完成此操作如下:

但这有点丑。有没有我想念的更简单的方法?

0 投票
1 回答
354 浏览

.net - 考虑开发人员时间的单元测试 GetHashCode

在我目前的项目中,我有几个 IEqualitycomparers。
它们采用对象的几个属性并比较它们。
属性可以是相等的,不同的,这既适用于值,也适用于空值。

我想对这些进行单元测试,但所有不同的可能性都是疯狂的。我怎样才能有效地测试这些?

更新
目前它们通过属性而不是构造函数获取它们的值,因为它们填充了 entlib 的数据块。

示例(在 vb.net 中,但我也讲 C#):

0 投票
2 回答
5530 浏览

c# - SequenceEqual 的 IEqualityComparer

在 C# 中,是否有IEqualityComparer<IEnumerable>使用该SequenceEqual方法确定相等性的方法?

0 投票
2 回答
1246 浏览

.net - 如何使用 IEqualityComparer 进行动态比较?

我有一个像这样的人类:

我创建了一个 Person 对象列表:

在 GetAllPersons() 中,我有这段代码,它根据 Id 提供唯一且非重复的人员对象。

这意味着如果源有两个 Id = 123 的人,则 123 不会出现在列表中。

这是实现 IEqualityComparer 的类

MyClass 集是基于 Id 的身份。

我有一个外部配置文件,其中有一个规定来设置人员类的身份属性,如 FirstName 或 LastName 等,它将根据该属性值识别一个唯一的人。

因此,如果配置文件将“FirstName”作为键,那么 MyClass 将如下所示:

在向字典添加人员对象之前,我实际上已经使用了一个字典,但是如果源具有重复条目(例如两个 id 为 123 的人员),它仍然会添加一个人员对象。如果这可以通过字典对象来完成,请确保最终集合确实具有唯一的对象并且不包括来自外部来源的重复记录,这将是很棒的。

我能做的是在一个单独的列表中维护一个重复列表。在该列表上做一个简单的 foreach 并从字典中删除这些人员对象,如下所示:

这里没有使用 IEqualityComparer,只需将来自外部源的记录添加到字典中,然后根据重复列表进一步过滤该字典。

有一个更好的方法吗?

问候。

0 投票
1 回答
144 浏览

.net - 创建相等比较器时,ReSharper 不显示基础类的属性

我的设置如下:

我有基于我的数据库的 T4 模板生成的 POCO 类。我的域模型继承自这些 POCO。基本上 POCO 模型就在那里,因此当我更改数据库时,我不必一直手动更新模型(我们使用 Dapper 作为我们的 ORM)。

我的问题是:

当我尝试使用 ReSharper 为我的域模型生成相等比较器时,resharper 接口不包含来自底层 POCO 类的属性,只包含来自域模型的属性。为什么会发生这种情况,就我而言,域模型从 POCO 继承,因此具有 POCO 的所有属性?

这是我的 POCO 课程:

然后我的域模型是:

0 投票
2 回答
920 浏览

linq - IQueryable 的 Contains() 和 IEnumerable 的 Contains() 有什么区别?

我有一个 cust,IQueryable一个Customercust,一个CustomerComparercustCp,它实现了IEqualityComparer.

当我打电话时,custs.Contains(cust, custCp)我得到一个例外:

但是当我打电话给custs.AsEnumerable().Contains(cust,custCp)它时。谁能解释为什么?