![]() |
1
145
当涉及到自定义对象时,linq distinct并没有那么聪明。 它所做的只是查看您的列表,并看到它有两个不同的对象(它不关心它们对于成员字段有相同的值)。 一种解决方法是实现如图所示的iequatable接口。 here 是的。 如果您像这样修改author类,它应该可以工作。
|
![]() |
2
65
这个
有一个 overload 这需要一个 IEqualityComparer ,因此可以指定不同的逻辑来确定给定对象是否等于另一个对象。 如果希望author的行为正常,就像一个普通的对象(即只引用相等),但是为了按名称值进行不同的检查相等,请使用 IEQualityComparer公司 是的。如果始终希望根据名称值比较author对象,则 重写gethashcode并等于 ,或 实现iEquatable 是的。
上的两个成员
|
![]() |
3
42
另一个没有实现的解决方案
|
![]() |
4
25
还有一种方法可以从用户定义的数据类型列表中获取不同的值:
当然,它会给出不同的数据集 |
![]() |
5
20
简单的解决方案是添加
对的
实施
这个
|
![]() |
6
10
您已经重写了equals(),但请确保也重写了gethashcode() |
![]() |
7
7
以上答案是错误的!!! 在msdn上声明的distinct返回默认赤道 默认属性检查类型T是否实现System.iequatable接口,如果实现,则返回使用该实现的EqualityComparer。 否则,它返回一个equalityComparer,它使用t提供的object.equals和object.getHashcode的重写 也就是说只要你过了头就没事了。 您的代码不起作用的原因是您选中了firstname==lastname。 看见 https://msdn.microsoft.com/library/bb348436(v=vs.100).aspx 和 https://msdn.microsoft.com/en-us/library/ms224763(v=vs.100).aspx |
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |