我见过的例子:
int[] a1 = { 1, 2, 3 };
int[] b1 = { 1, 2, 3 };
a1.Equals(b1) //false
a1.Equals(b1,EqualityComparer<int>.Default)); //true
但是我看不到重载的方法......
我错过了什么?
答案 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)