使用查询运算符 Distinct() 时,查询序列中的类型必须提供合适的 GetHashCode() 和 Equals() 重载,或者您必须传递 IEqualityComparer<T> 的实现。
我的问题:为什么 Distinct() 没有接受 Delegate 实例(例如,Comparison<T>)的重载?- 如果存在,则可以传递更轻量级的 lambda 表达式(比 IEqualityComparer<T> 的实现更轻量级)。- 我在这里错过了什么吗?
使用查询运算符 Distinct() 时,查询序列中的类型必须提供合适的 GetHashCode() 和 Equals() 重载,或者您必须传递 IEqualityComparer<T> 的实现。
我的问题:为什么 Distinct() 没有接受 Delegate 实例(例如,Comparison<T>)的重载?- 如果存在,则可以传递更轻量级的 lambda 表达式(比 IEqualityComparer<T> 的实现更轻量级)。- 我在这里错过了什么吗?
因为它使用GetHashCode()
.
您不能委托提供哈希码。
它可能需要两个代表,但这会令人困惑。
最好问一下为什么没有一种DistinctBy()
方法可以进行投影。
否则你可以试试MoreLINQ及其方法 DistincBy