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

c# - 如何让 Distinct() 处理自定义对象的集合

我已经按照这篇文章的建议尝试让 Distinct() 在我的代码中工作,但我仍然遇到问题。这是我正在使用的两个对象:

我的目标是用几千个对象填充一个InvoiceItems对象(我们称之为) ,然后执行:aBunchOfInvoiceItemsInvoiceItem

当我设置并运行此代码时,我收到一条错误消息

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“InvoiceReader.Form1.InvoiceItems”。存在显式转换(您是否缺少演员表?)

我不明白如何解决这个问题。我应该采取不同的方法吗?非常感谢任何建议。

0 投票
5 回答
3962 浏览

c# - 我的类的 C# 通用列表包含找不到我的实例的方法

我们为我们的 CMS 准备了几个类,我试图让平等工作,​​所以我可以检查一个通用列表是否包含一个项目。我们有一些继承层,我将在下面向您展示。在此之下,我将向您展示一些行为与我的预期相反的示例代码。如果您发现我做错了什么,请告诉我。我已经减少了下面的示例,只是为了向您展示相关的部分。我的实际课程要大得多,但我认为这是你需要看到的一切。

IBaseTemplate.cs

BasePage.cs

登陆页面.cs

示例页面.aspx.cs

我希望coll.Contains(p4)返回true,因为即使p1throughp4是不同的实例,继承的Equals方法 fromBasePage也会GUID根据IBaseTemplate. 我在这里错过了什么吗?

我查看了List(T) 的 Contains 方法的文档,我正在实现IEquatable<T>.Equalswhere Tis IBaseTemplate

0 投票
2 回答
732 浏览

linq - 具有单个比较类(和接口)的 Linq Distinct

我的应用程序中有几个类,它们都有一个Name我想用作比较基础的属性(Distinct()等)。因为我总是要比较Name,所以我决定提取一个接口 ,ISomeComparedStuff它只是具有Name我所有其他类都实现的属性。我这样设置了一个比较类:

唯一的问题是当我尝试对其进行编码时:

我收到一个演员错误(SomeStuffto ISomeComparedStuff)。有没有办法做到这一点,所以我只需要一个比较类,否则我必须为我的每个类创建一个(即使我总是要比较Name)?

注意:我理解这个问题“标题”需要帮助。任何建议都会很棒。

0 投票
6 回答
266 浏览

c# - 在 IEquatable 中实施是必要的参考检查

我有一堂课可以实施IEquatable<T>。是否有必要进行参考检查Equals()还是在框架中进行了处理?

在上面的例子中,this==other陈述是多余的还是必要的?

更新 1

我知道我需要更正代码如下:

感谢您的回复。

0 投票
1 回答
15833 浏览

c# - Linq .Except 函数“至少一个对象必须实现 IComparable。”

基本上我有一个实现 IEquatable 的容器(示例如下所示)

和一个同样实现 IEquatable 的 CustomClass

所有这些都工作正常,例如,以下工作

在此代码之后,枚举时的 diff 和 diff2 都包含预期的结果。但是,如果我再尝试

当我尝试枚举异常列表时,我得到“至少一个对象必须实现 IComparable。”。oldCustom 和 newCustom 与上述工作示例中的唯一区别在于它们的填充方式。有人知道为什么会这样吗?

0 投票
3 回答
318 浏览

c# - 当我比较一个对象(类型)时,它是否使用特定类的 IEquatable?

我的方法接收两个Object类型的参数。它们具有相同的类型,即实现IEquatable.

我的问题是:当我这样做时:param1 == param2框架是使用IEquatable特定类的运算符覆盖进行比较还是使用object.Equals仅比较两个对象的内存指针?

最好的方法是什么?有泛型和派生约束吗?

0 投票
4 回答
2733 浏览

c# - collections.Contains(T) 方法

我正在使用System.Collections.Generic,其中包含我编写的类的实例。

我已经读过 collections.Contains方法使用object.Equals(),或者接口中的Equals()方法的实现。IEquatable

我已经覆盖了对象方法,以及从接口实现。但是,Queue.Contains(instance)总是返回false。我究竟做错了什么?

例如...

fooInstance2 总是添加到队列中。事实上,当我在调试器上运行它时,永远不会达到 Equals 的实现。

我究竟做错了什么?

0 投票
2 回答
2148 浏览

c# - 类型对象的多个属性的动态相等检查

我有一个类型:

我已经实现了IEquatable<T>接口来检查这种类型的两个对象是否相同。当前Equals方法如下所示:

但我希望以这样一种方式实现此方法,即它可以动态检查所有现有属性(或者可能是这种类型的某些属性)的相等性,而无需像上面那样显式编写用于比较检查的代码。

希望我能够清楚地表达我的问题。:)

谢谢!

0 投票
5 回答
8426 浏览

c# - 我可以在接口上重载 == 运算符吗?

我有一个这样的界面:

我有多个实现 IFoo 的类。
我想检查相等性,而不是基于 ReferenceEquality,但是如果 A 和 B 相同,则两个 IFoo 应该被认为是相等的(实际上我正在检查通过 WCF 发送的键值对的集合,这就是为什么我可以'没有 ReferenceEquality)。
现在,如果我有:

目前IFooIEquatable<IFoo>,所以 FooBar1 和 FooBar2 覆盖Equals(IFoo other),但这不是在 == 上调用的。我正在寻找我的代码以替换a==b任何a.Equals(b)地方,但这并不好。

我能做些什么?

0 投票
3 回答
18836 浏览

c# - 当对象的标识符为空时,GetHashCode 应该返回什么?

考虑到身份属性可能为空,以下哪一项是正确/更好的。

或者

更新 1:更新了第二个选项。

更新 2:以下是 Equals 实现:

ID是string类型。