.net - 为什么 SequenceEqual 采用 IEqualityComparer 而不是谓词?

标签 .net linq-to-objects

为什么Enumerable.SequenceEqual将其比较器视为 IEqualityComparer ?该算法似乎没有使用 GetHashCode .为什么不取一个 Func<TSource, TSource, bool>谓词,类似于 First需要一个 Func<TSource, bool> ?

最佳答案

我很想说“因为”。

如果您环顾其他类似的方法(例如 Enumerable.Distinct ),它们也会采用 IEqualityComparer在重载中。

还有一个 IEqualityComparer是检查对象是否相等的“正确”方法。一个 Func<TSource, TSource, bool>不一定要检查相等性,它会检查对象在此时此刻是否足够相似以供您的特定使用。

幸运的是,制作自己的扩展方法很容易。例如MoreLinq有一个 DistinctBy 的实现你可以看看。

关于.net - 为什么 SequenceEqual 采用 IEqualityComparer 而不是谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087969/

相关文章:

.net - .NET 的瑞典日历中没有 1712 年 2 月 30 日?

c# - 从对象集合动态构建 lambda 表达式?

c# - Linq-to-objects:从平面源创建两级层次结构

c# - 按匿名类型的字段排序

c# - 如果为空则返回零的 Lambda 表达式

c# - 帮助处理类聚合关系上的 linq orderby

c# - 在 C# 中处理大文件时出现内存不足异常

.net - SqlMembershipProvider 与自定义解决方案

c# - 如何在 C# 中将 Dictionary<> 转换为 Hashtable?

c# - 即使 Process.HasExited 为真,Process.WaitForExit 也不会返回