问题标签 [iequatable]

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 回答
1481 浏览

c# - 自定义对象使用除了未能使用 IEqualityComparer

这是目标代码:

我有两个列表如下:

delItems 始终包含两个项目。我在这里想念什么?

编辑:代码现在实现 IEquatable

0 投票
3 回答
11817 浏览

c# - 在列表中查找项目通过提供示例对象实例

为什么有List<T>.Contains(T)方法却没有List<T>.Find(T)方法?仅Find支持支持谓词的 s。如果我们有一个现有的 T 实例填充了它的 ID 的属性值(但缺少其他属性)为什么我们不能通过提供这个对象实例来搜索 in 进行搜索List,特别是当我们已经实现自定义IEquatable<T>T希望使用什么东西在那里。但事实上,我们不能,我们必须在调用中重复我们在IEquatable实现中所做的一切。Find(predicate)

0 投票
2 回答
928 浏览

c# - CLR 类型的 Object.Equals(objA, objB)、objA.Equals(objB) 和 objA == objB 之间的区别?

我想知道 CLR 类型是否会从以下返回不同的结果:

我确实意识到,在 CLR 之外,有人可以轻松地实现IEqualtableEquals 并不正确地重载 == 运算符。我不关心人们不正确地实施这些。我关心的是类(包括 String、Int32 等)以不同的方式实现这 3 个。

此外,如果可能的话,哪一个应该是用于整体比较(全面)的。我想知道这是因为我遇到了一个使用Object.Equals(objA, objB)整个视图模型而不是其他两个的文件。

0 投票
5 回答
660 浏览

c# - 实现 IEquatable在可变类型中

我有一个代表外部物理测量设备的类。简化版如下所示:

Tag是用于识别设备的用户定义值。Address是适配器用来与设备通信的值。如果两个实例Device具有相同的Address,则将使用相同的外部测量设备。

我想通过覆盖和实现来模仿代码中的这种行为(用于使用Contains和之类的方法) :DistinctEqualsIEquatable<T>

如您所见,我忽略TagEquals.

所以,我的问题是:我应该在实现中忽略该Tag属性Equals吗?这样做是否会使代码更难理解?有没有更好的方法来做我想做的事情?我需要该Tag属性,因为通常用户不知道Address,甚至不知道是否DeviceAddress( 在 App.config 文件中处理,并且用户将处理一个名为的接口,该接口IDevice不有财产Address)。

更新:

感谢大家的回复。

所以,我认为我应该使用自定义IEqualityComparer. 如果我的真实代码看起来更像这样,您对如何执行此操作有任何指导吗?

我应该检查我的设备类型IEqualityComparer吗?

0 投票
1 回答
84 浏览

gethashcode - 在值类上实现 GetHashCode

我有一个类 Money,我想知道在这个值类上实现 GetHashCode 的最佳方法是给 $1 != €1。对货币 * 值进行加权值是行不通的。

0 投票
5 回答
30839 浏览

c# - IEqualityComparer 和有什么区别和 IEquatable?

我想了解应该使用IEqualityComparer<T>和使用的场景。IEquatable<T>两者的 MSDN 文档看起来非常相似。

0 投票
3 回答
146 浏览

c# - IEquatable 是否级联?

关于 IEquatable,我有一个非常简单的问题。给定以下基本类:

如果我想比较 Person 对象的相等性,我会怎么做?如果我在 Person 类上实现 IEquatable 接口,它会自动级联到该类中的任何对象,还是我必须在所有类上显式实现接口?

如果我必须在所有类上实现接口,在将 Person 的实例与 Person 的另一个实例进行比较时,是否有任何特殊的“陷阱”我应该注意?

0 投票
2 回答
3883 浏览

vb.net - 是否正确实施了 IEquatable?我应该总是覆盖 GetHashCode 吗?

我看到了这里提出的问题:我是否正确实现了 Equals()/GetHashCode()?但是我的 c# 没有那么强大,而且我对 IEquatable 不够熟悉,如果可能的话,我想在 VB.NET 中看到它。

我的示例代码(当我到达那里时,该类最终将使用 INotifyPropertyChanged):

谢谢,

0 投票
3 回答
2366 浏览

entity-framework-4 - 为 POCO 实施 IEquatable

我注意到 EF 的 DbSet.Add() 非常慢。用谷歌搜索一下,得到了一个承诺高达 180 倍性能提升的 SO 答案:

https://stackoverflow.com/a/7052504/141172

但是,我不完全了解如何IEquatable<T>按照答案中的建议实施。

根据 MSDN,如果我实现IEquatable<T>,我还应该覆盖Equals()and GetHashCode()

与许多 POCO 一样,我的对象是mutable。在提交到数据库 ( SaveChanges()) 之前,新对象的 Id 为 0。 保存对象之后,Id 作为实现 IEquatable、Equals() 和 GetHashCode() 的理想基础。

在哈希码中包含任何可变属性是不明智的,因为根据 MSDN

如果两个对象比较相等,则每个对象的 GetHashCode 方法必须返回相同的值

我应该IEquatable<T>作为逐个属性的比较来实现(例如this.FirstName == other.FirstName)而不是覆盖 Equals() 和 GetHashCode() 吗?

鉴于我的 POCO 在 EntityFramework 上下文中使用,是否应特别注意 Id 字段?

0 投票
2 回答
3101 浏览

c# - 如何使用泛型测试 NaN(或者为什么 NaN.Equals(NaN) == true)?

我需要在数组中找到最小值最大值(不考虑该数组中可能的NaN值)。

这很容易只使用double,但是这些 FindMin 和 FindMax 函数必须使用泛型类型。

我试图以这种方式测试通用NaN:

但是Equals回来truedouble.NaN??!!

我现在有这样的解决方法:

我的问题更多是关于理解为什么第一个解决方案不起作用,这是一个错误吗?

你可以在这里找到小的测试代码