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)