与 lambda 不同()?

2024-02-22

是的,所以我有一个可枚举的值,并希望从中获得不同的值。

Using System.Linq,当然,有一个扩展方法叫做Distinct。在简单的情况下,它可以不带参数使用,例如:

var distinctValues = myStringList.Distinct();

很好,但是如果我有一个需要指定相等性的可枚举对象,则唯一可用的重载是:

var distinctValues = myCustomerList.Distinct(someEqualityComparer);

相等比较器参数必须是一个实例IEqualityComparer<T>。当然,我可以做到这一点,但它有点冗长而且笨拙。

我所期望的是一个需要 lambda 的重载,比如说Func<T, T, bool>:

var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);

有人知道是否存在这样的扩展,或者一些等效的解决方法?或者我错过了什么?

或者,有没有一种方法可以指定IEqualityComparer内联(让我难堪)?

Update

我找到了 Anders Hejlsberg 的回复post https://social.msdn.microsoft.com/Forums/en-US/6834054e-e1c1-49db-970c-370a9012c675/distinct-method-suggestion?forum=linqprojectgeneral在关于此主题的 MSDN 论坛中。他说:

您将遇到的问题是,当两个对象进行比较时 相等,它们必须具有相同的 GetHashCode 返回值(否则 Distinct 内部使用的哈希表将无法正常工作)。 我们使用 IEqualityComparer 因为它封装兼容 将 Equals 和 GetHashCode 的实现集成到单个接口中。

我想这是有道理的。


IEnumerable<Customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与 lambda 不同()? 的相关文章

随机推荐