用于SequenceEqual的IEqualityComparer

在C#中,是否存在使用SequenceEqual方法确定相等性的IEqualityComparer

.NET Framework中没有这样的比较器,但您可以创建一个:

 public class IEnumerableComparer : IEqualityComparer> { public bool Equals(IEnumerable x, IEnumerable y) { return Object.ReferenceEquals(x, y) || (x != null && y != null && x.SequenceEqual(y)); } public int GetHashCode(IEnumerable obj) { // Will not throw an OverflowException unchecked { return obj.Where(e => e != null).Select(e => e.GetHashCode()).Aggregate(17, (a, b) => 23 * a + b); } } } 

在上面的代码中,我迭代了GetHashCode集合的所有项。 我不知道它是否是最明智的解决方案,但这是在内部HashSetEqualityComparer完成的。