我是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");
答案 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"
。