【发布时间】:2016-09-08 19:32:04
【问题描述】:
我正在比较 Triangle 类型的两个对象,显然它们被认为是相等的(我实现了我的自定义 GetHaschCode 以及 Equal 方法和运算符)。
List<Triangle> triangles = ...;
bool same = triangles[0] == triangles[1];
// same is true
但是,当我在该列表中 Distinct() 时,它会保留所有元素(在我看来,这听起来像是通过引用进行比较,而不是通过我的自定义条件进行比较)。是这样吗?我该怎么办?
int countBefore = triangles.Count();
int countAfter = triangles.Distinct().Count();
bool same = countBefore == countAfter;
// same is true, again
我遗漏了一些相当明显的东西,不是吗?
【问题讨论】:
-
嗯,你能展示一个可重现的例子吗?听起来像是不正确的
GetHashCode实现。 -
这无济于事。如果您在
Triangle类中正确实现了Equals和GetHashCode覆盖,则Distinct将在没有IEqualtable<Triangle>的情况下正常工作。如果你的GetHasCode不正确,实现接口不会改变任何东西。只需发布课程代码,我们就会告诉您问题所在。看,如果你返回不同的哈希码,你的Equals方法根本不会被调用。 -
@IvanStoev 请将其作为回复发布,以便我接受。你说得对,伙计。您也可以从我上面的评论中提及一些内容,以使答案对后代更加有用。天才!
-
@KonradViltersten 谢谢你的朋友,但我已经看过很多次了,我很确定这是一个骗局。例如,stackoverflow.com/questions/371328/… 确实解释了这一切。
-
@IvanStoev 看起来是这样,是的。事实上,我可以看到我对其中的一些答案投了赞成票,所以我一定看过。但是,没有建立联系,呵呵。
标签: c# linq reference distinct equals