C#IEqualityComparer<IEnumerable>
では、メソッドを使用してSequenceEqual
同等性を判断するものはありますか?
5530 次
2 に答える
25
.NET Framework にはそのような比較子はありませんが、作成できます。
public class IEnumerableComparer<T> : IEqualityComparer<IEnumerable<T>>
{
public bool Equals(IEnumerable<T> x, IEnumerable<T> y)
{
return Object.ReferenceEquals(x, y) || (x != null && y != null && x.SequenceEqual(y));
}
public int GetHashCode(IEnumerable<T> 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
。それが最も賢明な解決策かどうかはわかりませんが、これは internal で行われHashSetEqualityComparer
ます。
于 2013-02-03T18:27:24.013 に答える