问题标签 [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# - 在 WinRT 解决方案中实现 IEquatable?
所以我有点问题。我会看看我能解释到什么程度。
我有一个类作为链接在我的 Windows Phone 前台应用程序和后台之间共享(它们都使用相同的文件),这是因为数据是从此类中序列化并向后传递的,因此它需要完全相同。
在前台进程中,我想使用 IEquatable 来覆盖 GetHash 和 Equals,因此当我在 ItemModel 上调用 ObservableCollection.Remove 时,它不会根据引用进行删除,我可以让它在删除选定的项目时手动比较属性来自另一个列表(即 2 个相同的项目,每个项目在内存中都有自己的位置)。
我已经测试过,它工作正常,但我无法在 Windows 运行时界面中实现 IEquatable(我还是不太明白,但没关系)“错误 10 类型'Project.ViewModels.ItemModel'实现接口'System.IEquatable' ,它不是Windows Runtime接口。所有导出类型实现的接口都必须是Windows Runtime接口。”
所以 IEquatable 在前台进程中是允许的,但不是在后台,而是因为它们正在使用链接文件。你可能会问,为什么不在后台项目中复制这个类而不实现 IEquatable?好吧,因为当两个类的定义不完全相同时,我开始遇到序列化和反序列化数据的问题。
.net - Equals Remove wrong assignment inside Equals
I have following class which i am using to compare some objects it looks like it:
I am able to compare correctly Compare e.g:
but i got problem with Remove, the method is always going to Equals first enum value PartId, no matter what i send to constructor, why is that?
c# - IEquatable 中断加载实体框架实体
我想比较记录以查看它们之间是否存在差异。
Person
桌子:
记录 1 和 2 是“相等的”。记录 2 和 3 “不相等”。
我IEquatable
在模型上实现Person
如下。
问题是当Persons
来自导航属性的 ICollection 被具体化时。它缺少彼此“相等”的记录(即返回单个 John Smith 123 A Street 记录)。我猜这是因为默认情况下它会考虑具有唯一主键的不同实体。通过覆盖 equals 它认为两个记录是同一个实体。
屏幕截图显示Addresses
而不是Persons
:(顶部有IEquatable
,底部没有)
我如何协调 EF 需要在对象级别看到平等与我想要看到逻辑平等?
c# - C#,在覆盖 GetHashCode 和 Equals 时应考虑哪些类字段/成员?
关于这个主题有一个很好的问题和答案: 我必须在新类中覆盖 GetHashCode 和 Equals 吗?
正如它所提到的:
如果您需要值相等语义,您只需要覆盖它们。System.Object 实现并不“坏”,它只是做一个引用检查(这是该级别的所有实现都可以做的)。
简而言之:如果您需要某种基于值的相等性(基于类属性的相等性),那么是的,覆盖掉。否则,它应该已经很好了。
假设我有一个类用户:
这样对吗?
- 需要注释的第一个 Equals 覆盖方法?
在这种情况下,我应该在 GetHashCode 覆盖中包含哪些类成员?参与 Equals 方法的所有成员?
/li>
例如,如果我只使用 FirstName 会发生什么?
c# - 在 Hashset 或其他集合中使用继承对象时,为什么 Equals(object) 胜过 Equals(T)?
我知道我总是必须覆盖Equals(object)
并且GetHashCode()
在实施IEquatable<T>.Equals(T)
.
但是,我不明白,为什么在某些情况下Equals(object)
胜过通用Equals(T)
.
例如为什么会发生以下情况?如果我声明IEquatable<T>
一个接口并为它实现一个具体类型,则在将这些类型的项目相互比较时X
,一般Equals(object)
会被 a 调用。Hashset<X>
在至少一侧被转换为接口的所有其他情况下,Equals(T)
调用正确的。
这是一个代码示例来演示:
c# - 为什么 IntPtr 不实现 IEquatable?
我在我的应用程序中看到了相当多的垃圾收集器停顿,所以我对其进行了分析,发现大量垃圾是由我的一种方法生成的,该方法仅执行以下操作:
return Address.Equals(other.Address)
Address
一个在哪里IntPtr
。
事实证明,IntPtr
它不像大多数值类型那样实现IEquatable<T>
,因此我other.Address
每次都在装箱。
是否有充分的理由IntPtr
不实现该接口,或者这是一个疏忽?
c# - 在 GetHashCode 实现中处理集合
我正在这里的答案中基于 HashCode 结构实现 GetHashCode() 。由于我的 Equals 方法将考虑使用 Enumerable.SequenceEqual() 的集合,因此我需要在 GetHashCode() 实现中包含这些集合。
作为起点,我使用 Jon Skeet 的嵌入式 GetHashCode() 实现来测试 HashCode 结构实现的输出。使用下面的以下测试可以按预期工作 -
下一步是在 GetHashCode() 计算中考虑集合。这需要对 MyObjectEmbeddedGetHashCode 中的 GetHashCode() 实现进行少量添加。
但是,这在 HashCode 结构中有点困难。在此示例中,当将 List 类型的集合传递给 Hash 方法时,T 是 List,因此尝试将 obj 强制转换为 ICollection 或 IEnumberable 不起作用。我可以成功转换为 IEnumerable,但它会导致装箱,我发现我不得不担心排除实现 IEnumerable 的字符串等类型。
在这种情况下,有没有办法可靠地将 obj 转换为 ICollection 或 IEnumerable ?
c# - 自定义包含列表C#
我正在尝试在列表中使用 List.Contains 我要比较的对象来自 C# 中的服务引用,它们的 Equals 方法不适合我的需要。
我一直在研究 IEquatables 或如何在我“给定”的对象中覆盖我的 Equals 方法,但我似乎找不到解决方案。有人知道一种有效的方法吗?
arrays - 在 [SomeProtocol] 类型的数组中查找对象的索引
我有一个称为订阅者的数组,它存储符合 JABPanelChangeSubscriber 协议的对象。该协议被声明为
我的数组被声明为:
现在我需要实现一个方法来将订阅者添加到列表中,但它首先必须检查该订阅者之前是否尚未添加。
不幸的是,JABPanelChangeSubscriber 不是 Equatable,我不知道如何使它 Equatable,所以 find 方法给了我一个错误。任何人都可以帮助我解决问题或提出不同方法的建议吗?
谢谢
swift - 在可散列类中自动实现唯一 ID
我创建了一个新类,我希望它是 Hashable 和 Equatable,这样我就可以轻松地遍历它,下面是一个类示例:
问题是现在我必须在创建类时传递一个 uid,如下所示:
我想让 uid 静态并为我创建的每个对象自动生成一个新的,如下所示:
在这种情况下,user2 的 uid 将等于 2,它只是一个不需要获取的 set 属性,因为它应该对使用该类的人完全透明。
但是,每次我尝试将 uid 更改为 astatic var
或 aclass var
时,我都无法使其符合Hashable protocol
提前致谢