.net - Enumerable.SequenceEqual<TSource> 和 EqualityComparer<T>

标签 .net linq msdn enumerable iequalitycomparer

来自 MSDN

The SequenceEqual(IEnumerable, IEnumerable) method enumerates the two source sequences in parallel and compares corresponding elements by using the default equality comparer for TSource, Default. The default equality comparer, Default, is used to compare values of the types that implement the IEqualityComparer generic interface.

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 { }

那么我是不是误解了这句话试图传达的意思,或者这句话明显是错误的?

谢谢

最佳答案

不是TSource应该实现 IEqualityComparer

但是EqualityComparer<T>.Default工具 IEqualityComparer

The default equality comparer, Default, is used to compare values of the types that implement the IEqualityComparer generic interface.

这太容易忘记了。

关于.net - Enumerable.SequenceEqual<TSource> 和 EqualityComparer<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721271/

相关文章:

c# - System.Linq.Dynamic 和 DateTime

ios - Azure 语音转文本 API

c# - 我如何将 python 对象作为参数传递给 C# 程序

c# - 具有证书身份验证的 WCF 服务引用

c# - 需要帮助创建控件来显示数据

c# - 在 Entity Framework C# 中返回列表的最大列表

.net - 如何从 vb.net 中的列表中获取重复项

c# - LINQ 查询返回列表列表

.net - ICollection<T>.IsReadOnly 的契约(Contract)

c++ - 一秒钟有多少滴答声?