来自MSDN
在 SequenceEqual(IEnumerable的, IEnumerable)方法 枚举两个源序列 并行比较对应 使用默认相等的元素 比较器用于TSource,默认。该 默认等式比较器,默认值为 用于比较类型的值 实现的 IEqualityComparer泛型 接口
a)据我理解上面的引用,这意味着EqualityComparer<T>.Default
用于比较实现IEqualityComparer<T>
的类型的元素,而事实上Default
用于返回特定的调用IEqualityComparer<T>
{假设IEquatable<T>.Equals
可分配给T
)或调用IEquatable<T>
Object.Equals
的实施
b)引用还表明TSource
必须实现IEqualityComparer<T>
,这不是真的:
static void Main(string[] args)
{
Test test1 = new Test();
Test test2 = new Test();
Test[] list1 = { test1, test2 };
Test[] list2 = { test1, test2 };
bool eq = list1.SequenceEqual(list2); //works
}
public class Test { }
所以我误解了引用所传达的内容或引用的错误是什么?
谢谢
答案 0 :(得分:2)
来自MSDN:
Default属性检查是否 type T实现了 System.IEquatable接口和if 所以,返回一个EqualityComparer 使用该实现。 否则,它返回一个使用的EqualityComparer 覆盖Object.Equals和 由T。
提供的Object.GetHashCode
在您的示例中,它只使用引用相等性,它是引用对象的默认相等实现。
答案 1 :(得分:2)
不TSource
应该实施IEqualityComparer
但是EqualityComparer<T>.Default
实现了IEqualityComparer
默认等式 comparer ,默认值,用于比较实现 IEqualityComparer泛型接口的类型的值。
这太过于遗忘而无法被提及。