问题标签 [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.
c# - 自定义对象使用除了未能使用 IEqualityComparer
这是目标代码:
我有两个列表如下:
delItems 始终包含两个项目。我在这里想念什么?
编辑:代码现在实现 IEquatable
c# - 在列表中查找项目通过提供示例对象实例
为什么有List<T>.Contains(T)
方法却没有List<T>.Find(T)
方法?仅Find
支持支持谓词的 s。如果我们有一个现有的 T 实例填充了它的 ID 的属性值(但缺少其他属性)为什么我们不能通过提供这个对象实例来搜索 in 进行搜索List
,特别是当我们已经实现自定义IEquatable<T>
并T
希望使用什么东西在那里。但事实上,我们不能,我们必须在调用中重复我们在IEquatable
实现中所做的一切。Find(predicate)
c# - CLR 类型的 Object.Equals(objA, objB)、objA.Equals(objB) 和 objA == objB 之间的区别?
我想知道 CLR 类型是否会从以下返回不同的结果:
我确实意识到,在 CLR 之外,有人可以轻松地实现IEqualtable
Equals 并不正确地重载 == 运算符。我不关心人们不正确地实施这些。我关心的是类(包括 String、Int32 等)以不同的方式实现这 3 个。
此外,如果可能的话,哪一个应该是用于整体比较(全面)的。我想知道这是因为我遇到了一个使用Object.Equals(objA, objB)
整个视图模型而不是其他两个的文件。
c# - 实现 IEquatable在可变类型中
我有一个代表外部物理测量设备的类。简化版如下所示:
Tag
是用于识别设备的用户定义值。Address
是适配器用来与设备通信的值。如果两个实例Device
具有相同的Address
,则将使用相同的外部测量设备。
我想通过覆盖和实现来模仿代码中的这种行为(用于使用Contains
和之类的方法) :Distinct
Equals
IEquatable<T>
如您所见,我忽略Tag
了Equals
.
所以,我的问题是:我应该在实现中忽略该Tag
属性Equals
吗?这样做是否会使代码更难理解?有没有更好的方法来做我想做的事情?我需要该Tag
属性,因为通常用户不知道Address
,甚至不知道是否Device
有Address
( 在 App.config 文件中处理,并且用户将处理一个名为的接口,该接口IDevice
不有财产Address
)。
更新:
感谢大家的回复。
所以,我认为我应该使用自定义IEqualityComparer
. 如果我的真实代码看起来更像这样,您对如何执行此操作有任何指导吗?
我应该检查我的设备类型IEqualityComparer
吗?
gethashcode - 在值类上实现 GetHashCode
我有一个类 Money,我想知道在这个值类上实现 GetHashCode 的最佳方法是给 $1 != €1。对货币 * 值进行加权值是行不通的。
c# - IEqualityComparer 和有什么区别和 IEquatable?
我想了解应该使用IEqualityComparer<T>
和使用的场景。IEquatable<T>
两者的 MSDN 文档看起来非常相似。
c# - IEquatable 是否级联?
关于 IEquatable,我有一个非常简单的问题。给定以下基本类:
如果我想比较 Person 对象的相等性,我会怎么做?如果我在 Person 类上实现 IEquatable 接口,它会自动级联到该类中的任何对象,还是我必须在所有类上显式实现接口?
如果我必须在所有类上实现接口,在将 Person 的实例与 Person 的另一个实例进行比较时,是否有任何特殊的“陷阱”我应该注意?
vb.net - 是否正确实施了 IEquatable?我应该总是覆盖 GetHashCode 吗?
我看到了这里提出的问题:我是否正确实现了 Equals()/GetHashCode()?但是我的 c# 没有那么强大,而且我对 IEquatable 不够熟悉,如果可能的话,我想在 VB.NET 中看到它。
我的示例代码(当我到达那里时,该类最终将使用 INotifyPropertyChanged):
谢谢,
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 字段?
c# - 如何使用泛型测试 NaN(或者为什么 NaN.Equals(NaN) == true)?
我需要在数组中找到最小值和最大值(不考虑该数组中可能的NaN值)。
这很容易只使用double
,但是这些 FindMin 和 FindMax 函数必须使用泛型类型。
我试图以这种方式测试通用NaN:
但是Equals
回来true
了double.NaN
??!!
我现在有这样的解决方法:
我的问题更多是关于理解为什么第一个解决方案不起作用,这是一个错误吗?
你可以在这里找到小的测试代码