【问题标题】:Why is there no Overload of Distinct() accepting a Comparison Delegate (or similar)为什么没有接受比较委托(或类似)的 Distinct() 重载
【发布时间】:2011-11-18 03:35:08
【问题描述】:

当使用查询运算符 Distinct() 时,查询序列中的类型必须提供合适的 GetHashCode() 和 Equals() 重载,或者您必须传递 IEqualityComparer 的实现。

我的问题:为什么 Distinct() 没有过载接受委托实例(例如比较)? - 如果存在,则可以传递更轻量级的 lambda 表达式(比 IEqualityComparer 的实现更轻量级)。 - 我在这里错过了什么吗?

【问题讨论】:

  • Distinct 将检查 Equals 和 GetHashCode 如果必须...您认为您实际上能够提供多轻的 lambda?
  • Distinct() with lambda?的可能重复
  • 嗨 ErOx!我建议了一个像 Tor Haugen 在 Distinct() 中提出的解决方案 with lambda?: var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);嗨马格努斯!嗯,我没有找到 Tor 的问题,所以我的问题是重复的,是的!感谢您的 cmets!
  • 但这只有在您想要考虑的唯一事情是单个属性时才有效……这通常不是某人想要的。但是,如果这是您想要的,那么我会说 Jon Skeet 的答案和实现是要走的路(即 DistinctBy(x => x.PropertyName)
  • 是的,我知道 Jon 的 DistinctBy(),也许真正的问题是,为什么它作为标准查询运算符不存在(解释 SLaks 的答案)。但是很多时候你想比较单个项目(我认为,这一个典型案例。)。

标签: linq linq-to-objects distinct iequalitycomparer


【解决方案1】:

因为它使用GetHashCode()
您不能指定提供哈希码的委托。

可能需要两个代表,但这会令人困惑。

最好问问为什么没有DistinctBy() 方法可以进行投影。

【讨论】:

    【解决方案2】:

    否则你可以试试MoreLINQ及其方法DistincBy

    【讨论】:

    • DistinctBy() 将与 .NET 6 一起添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多