在C#,为什么Equals()方法总是arrays通过比较引用而不是通过比较内容来检查两者之间的相等?
因此,调用Equals()其实现的所有方法(很多)都不能像数组那样工作(它不会比较内容):
示例:
int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
var u = array1.Equals(array1); //true
var v = array1.Equals(array2); //false
var w = Array.Equals(array1, array2); //false
var x = (new List<int[]>(new int[][] { array1 })).Contains(array2); //false
var y = (new int[][] { array1 }).Any(x => x == array2); //false
var z = (new …Run Code Online (Sandbox Code Playgroud) 今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在List集合中.问题是列表找不到对象,并且当我可以在那里看到它时将index返回-1.然后我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象,我发现对象的一个属性,一个相同的ushort数组在比较时返回false,但它们包含完全相同的元素.
数组如下:
{ushort [1]} [0] 13
它们两者完全相同,只是其中一个对象包含在List中,而另一个对象在它自己的上面.可能是造成这个问题的原因是什么?我已经尝试了所有类型的不同方法来解决问题,但我不能弄清楚问题是什么.在这种特殊情况下,导致两个数组之间的比较返回false的原因是,我使用Object.equals和普通==比较器一样使用.谢谢