C# 平等比较缺失?

C# 平等比较缺失?,c#,.net-4.0,C#,.net 4.0,我见过这样的例子: int[] a1 = { 1, 2, 3 }; int[] b1 = { 1, 2, 3 }; a1.Equals(b1) //false a1.Equals(b1,EqualityComparer<int>.Default)); //true int[]a1={1,2,3}; int[]b1={1,2,3}; a1.等于(b1)//假 a1.等于(b1,等于比较者默认值)//真的 但是,我无法获得重载方法,正如您所看到的 我缺少什么?您引用的重载

我见过这样的例子:

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

a1.Equals(b1) //false

a1.Equals(b1,EqualityComparer<int>.Default)); //true
int[]a1={1,2,3};
int[]b1={1,2,3};
a1.等于(b1)//假
a1.等于(b1,等于比较者默认值)//真的
但是,我无法获得重载方法,正如您所看到的


我缺少什么?

您引用的重载方法是一个扩展方法。Intellisense仅在声明方法所在的命名空间时,才会在usings块中显示它

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

using System.Linq;

...

a1.SequenceEqual (b1, EqualityComparer<int>.Default);
使用System.Linq;
...
a1.SequenceEqual(b1,EqualityComparer.Default);

System.Object
上没有这样的方法(或者任何其他类型的方法允许在int数组上使用这样的方法)。 我认为您正在寻找方法,一种从LINQ到对象的扩展方法:

a1.SequenceEqual(b1, EqualityComparer<int>.Default)
编辑:如果要使用
IsStructuralEquatable
中的
Equals
方法,则必须强制转换到接口,因为数组:

((IsStructuralEquatable)a1).Equals(b1,EqualityComparer.Default)

您在哪里见过这样的例子?BCL中没有此类重载(第二个),除非有人将其定义为自定义扩展方法。@DarinDimitrov查看中间示例:该重载看起来像
IsStructuralEquatable
查看中间示例@Royi:因为接口是。如果你做了
IStructuralEquatable a1=new[]{1,2,3}
,它会直接工作。我理解,但为什么书中的代码会被打印掉,没有(!)接口?@Royi:这肯定是个错误-无法编译。我写了他们,我猜这是个错误。@w0lf你可以看出错误不是它。(尽管你是对的)重弹手没有告诉我nothing@RoyiNamir正如@Ani在他的文章中指出的那样,该方法的名称是
SequenceEqual
(没有最后的s)answer@w0lf哦,对不起。让我检查一下:)@Frederik你能看到中间的例子吗?为什么我不能像他们那样写呢?
a1.SequenceEqual(b1)
((IStructuralEquatable)a1).Equals(b1, EqualityComparer<int>.Default)