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

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?好吧,因为当两个类的定义不完全相同时,我开始遇到序列化和反序列化数据的问题。

0 投票
1 回答
57 浏览

.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?

0 投票
3 回答
1867 浏览

c# - IEquatable 中断加载实体框架实体

我想比较记录以查看它们之间是否存在差异。

Person桌子:

记录 1 和 2 是“相等的”。记录 2 和 3 “不相等”。

IEquatable在模型上实现Person如下。

问题是当Persons来自导航属性的 ICollection 被具体化时。它缺少彼此“相等”的记录(即返回单个 John Smith 123 A Street 记录)。我猜这是因为默认情况下它会考虑具有唯一主键的不同实体。通过覆盖 equals 它认为两个记录是同一个实体。

屏幕截图显示Addresses而不是Persons:(顶部有IEquatable,底部没有) 在此处输入图像描述

我如何协调 EF 需要在对象级别看到平等与我想要看到逻辑平等?

0 投票
2 回答
803 浏览

c# - C#,在覆盖 GetHashCode 和 Equals 时应考虑哪些类字段/成员?

关于这个主题有一个很好的问题和答案: 我必须在新类中覆盖 GetHashCode 和 Equals 吗?

正如它所提到的:

如果您需要值相等语义,您只需要覆盖它们。System.Object 实现并不“坏”,它只是做一个引用检查(这是该级别的所有实现都可以做的)。

简而言之:如果您需要某种基于值的相等性(基于类属性的相等性),那么是的,覆盖掉。否则,它应该已经很好了。

假设我有一个类用户:

这样对吗?

  1. 需要注释的第一个 Equals 覆盖方法?
  2. 在这种情况下,我应该在 GetHashCode 覆盖中包含哪些类成员?参与 Equals 方法的所有成员?

    /li>

例如,如果我只使用 FirstName 会发生什么?

0 投票
2 回答
988 浏览

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)调用正确的。

这是一个代码示例来演示:

0 投票
1 回答
125 浏览

c# - 为什么 IntPtr 不实现 IEquatable?

我在我的应用程序中看到了相当多的垃圾收集器停顿,所以我对其进行了分析,发现大量垃圾是由我的一种方法生成的,该方法仅执行以下操作:

return Address.Equals(other.Address)

Address一个在哪里IntPtr

事实证明,IntPtr它不像大多数值类型那样实现IEquatable<T>,因此我other.Address每次都在装箱。

是否有充分的理由IntPtr不实现该接口,或者这是一个疏忽?

0 投票
1 回答
3965 浏览

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 ?

0 投票
2 回答
1895 浏览

c# - 自定义包含列表C#

我正在尝试在列表中使用 List.Contains 我要比较的对象来自 C# 中的服务引用,它们的 Equals 方法不适合我的需要。

我一直在研究 IEquatables 或如何在我“给定”的对象中覆盖我的 Equals 方法,但我似乎找不到解决方案。有人知道一种有效的方法吗?

0 投票
2 回答
552 浏览

arrays - 在 [SomeProtocol] 类型的数组中查找对象的索引

我有一个称为订阅者的数组,它存储符合 JABPanelChangeSubscriber 协议的对象。该协议被声明为

我的数组被声明为:

现在我需要实现一个方法来将订阅者添加到列表中,但它首先必须检查该订阅者之前是否尚未添加。

不幸的是,JABPanelChangeSubscriber 不是 Equatable,我不知道如何使它 Equatable,所以 find 方法给了我一个错误。任何人都可以帮助我解决问题或提出不同方法的建议吗?

谢谢

0 投票
3 回答
2666 浏览

swift - 在可散列类中自动实现唯一 ID

我创建了一个新类,我希望它是 Hashable 和 Equatable,这样我就可以轻松地遍历它,下面是一个类示例:

问题是现在我必须在创建类时传递一个 uid,如下所示:

我想让 uid 静态并为我创建的每个对象自动生成一个新的,如下所示:

在这种情况下,user2 的 uid 将等于 2,它只是一个不需要获取的 set 属性,因为它应该对使用该类的人完全透明。

但是,每次我尝试将 uid 更改为 astatic var或 aclass var时,我都无法使其符合Hashable protocol

提前致谢