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