为什么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/