C# 包含相同元素的两个数组是否可以不相等?

C# 包含相同元素的两个数组是否可以不相等?,c#,arrays,list,c#-4.0,C#,Arrays,List,C# 4.0,今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在列表集合中。问题是列表找不到对象,当我已经可以看到它时,它返回的索引是-1。然后,我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象。在这里,我发现对象的一个属性(相同的ushort数组)在比较时返回false,但它们包含完全相同的元素 数组如下所示: {ushort[1]}[0]13 它们在这两个方面都完全相同,只是其中一个对象包含在列表中,而另一个对象本身。这个问题的原因可能是什么?我尝试过各种不同的方法来解决这个问题,

今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在列表集合中。问题是列表找不到对象,当我已经可以看到它时,它返回的索引是-1。然后,我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象。在这里,我发现对象的一个属性(相同的ushort数组)在比较时返回false,但它们包含完全相同的元素

数组如下所示:

{ushort[1]}[0]13


它们在这两个方面都完全相同,只是其中一个对象包含在列表中,而另一个对象本身。这个问题的原因可能是什么?我尝试过各种不同的方法来解决这个问题,但我不能仅仅找出问题所在。在这种特殊情况下,是什么导致两个数组之间的比较返回false,我使用
Object.equals
以及正常的
=
比较器进行了绑定。感谢使用数组,只有在比较指向同一数组的两个引用时,Equals才会返回true。要按内容比较不同的数组,可以使用:

 Enumerable.SequenceEqual(a1, a2)

此外,如果集合包含自定义类型的对象,请确保这些类型覆盖Equals、equality运算符(=)和GetHashCode。

对于数组,只有在比较指向同一数组的两个引用时,Equals才会返回true。要按内容比较不同的数组,可以使用:

 Enumerable.SequenceEqual(a1, a2)

另外,如果集合包含自定义类型的对象,请确保这些类型覆盖Equals、equality运算符(=)和GetHashCode。

这是什么类型的数组
{ushort[1]}[0]13
?这是什么语法?抱歉,我只是以调试器中显示的方式显示它。它意味着1个元素的ushort数组,第一个元素是13这是什么类型的数组?这是什么语法?抱歉,我只是以调试器中显示的方式显示它。这意味着ushort数组由1个元素组成,第一个元素是13OMG,我理解为什么这样做有效,但这会增加比较大型数组的时间。另外,它如何适用于某些类型的阵列,而不是所有类型的阵列?为什么在某些情况下它甚至在列表中找不到对象呢?对象只是一个类,它有一个ushort数组、一个ushort和一个int作为公共属性。绝对不会重写任何内容比较数组将花费与数组大小成比例的时间。关于比较有时有效有时无效的情况,可能在第一种情况下,您比较的是同一个对象,而在第二种情况下,您比较的是两个具有相同属性的不同对象。嗯,那么您是说相等比较器将本机数组视为对象?每个对象,包括数组和列表都有自己的相等比较器,由Equals方法实现。默认实现,
object.Equals
,只比较对象的引用,而不比较对象的内容。OMG,我理解为什么这样做有效,但这会增加比较大型数组的时间。另外,它如何适用于某些类型的阵列,而不是所有类型的阵列?为什么在某些情况下它甚至在列表中找不到对象呢?对象只是一个类,它有一个ushort数组、一个ushort和一个int作为公共属性。绝对不会重写任何内容比较数组将花费与数组大小成比例的时间。关于比较有时有效有时无效的情况,可能在第一种情况下,您比较的是同一个对象,而在第二种情况下,您比较的是两个具有相同属性的不同对象。嗯,那么您是说相等比较器将本机数组视为对象?每个对象,包括数组和列表都有自己的相等比较器,由Equals方法实现。默认实现,
object.Equals
,只比较对对象的引用,而不比较对象的内容。