在C#中比较两个数组

时间:2013-11-19 11:36:48

标签: c# arrays compare

我是C#的新手,只是比较两个数组......两个数组应该相等,因为它们的值相同,但结果总是假的...不确定原因。

char[] arOne =  { 'a', 'b', 'c', '\u0000' };
char[] arTwo = new char[] { 'a', 'b', 'c', '\u0000' };
Console.WriteLine(" Two arrays are equal ? ...{0}", (arOne == arTwo) ? "true" : "false");

5 个答案:

答案 0 :(得分:4)

尝试使用此

Enumerable.SequenceEqual Method (IEnumerable, IEnumerable)

bool areEqual = arOne.SequenceEqual(arTwo);

您正在做的是比较对象引用而不是集合的实际内容。

答案 1 :(得分:3)

==运算符只是比较引用,如果它们不相同则返回false。您可以使用SequenceEqual

bool bothSameChars = arOne.SequenceEqual(arTwo);

SequenceEqual也考虑了订单,如果无关紧要,您可以使用HashSet<Char>及其SetEquals方法非常有效:

HashSet<Char> charset1 = new HashSet<Char>(arOne);
HashSet<Char> charset2 = new HashSet<Char>(arTwo);
bothSameChars = charset1.SetEquals(charset2);

答案 2 :(得分:3)

使用此代码:

Console.WriteLine("Two arrays are equal? ...{0}", arOne.Intersect(arTwo).Any() ? "true" : "false");

答案 3 :(得分:0)

考虑以下代码......

Console.WriteLine(" Two arrays are equal ? ...{0}", Enumerable.SequenceEqual(arOne, arTwo) ? "true" : "false");

祝你好运!

答案 4 :(得分:0)

您目前正在检查两个对象的 REFERENCE 并检查它们是否相等,但它们显然不是。你想要做的是检查他们的 CONTENT AND SEQUENCE 是否相同,为此他们发明了令人敬畏的功能.SequenceEqual()。您的代码将类似于

char[] arOne = { 'a', 'b', 'c', '\u0000' };
char[] arTwo = new char[] { 'a', b', 'c', '\u0000' };
Console.WriteLine(" Two arrays are equal ? ... {0}", (arOne.SequenceEqual(arTwo)));

因为SequenceEqual()已经返回一个布尔值,你甚至不必再添加? "true" : false"