EqualityComparer丢失了吗?

时间:2012-01-21 19:56:30

标签: c# .net-4.0

enter image description here

我见过的例子:

  int[] a1 = { 1, 2, 3 };
  int[] b1 = { 1, 2, 3 };

a1.Equals(b1) //false

a1.Equals(b1,EqualityComparer<int>.Default)); //true

但是我看不到重载的方法......

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您正在考虑的重载方法是一种扩展方法。 Intellisense只会在你的usings块中声明声明方法的命名空间时显示它。

但是,该方法称为SequenceEqual,而不仅仅是等于。 您想要的方法在System.Linq中声明。

using System.Linq;

...

a1.SequenceEqual (b1, EqualityComparer<int>.Default);

答案 1 :(得分:4)

System.Object上没有这样的方法(或者允许在一组int上使用这种方法的任何其他类型)。 我想你正在寻找Enumerable.SequenceEqual方法,一种从LINQ到Objects的扩展方法:

a1.SequenceEqual(b1, EqualityComparer<int>.Default)

虽然您可以同等地做:

a1.SequenceEqual(b1)

编辑:如果您想使用Equals中的IStructuralEquatable方法,则必须转换为接口,因为数组implement this interface explictly

((IStructuralEquatable)a1).Equals(b1, EqualityComparer<int>.Default)