我是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");
尝试使用此
Enumerable.SequenceEqual方法(IEnumerable,IEnumeraable)
bool areEqual = arOne.SequenceEqual(arTwo);
您正在做的是比较对象引用,而不是比较集合的实际内容。
使用此代码:
Console.WriteLine("Two arrays are equal? ...{0}", arOne.Intersect(arTwo).Any() ? "true" : "false");
==
运算符只比较引用,如果它们不相同,则返回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);
考虑以下代码。。。
Console.WriteLine(" Two arrays are equal ? ...{0}", Enumerable.SequenceEqual(arOne, arTwo) ? "true" : "false");
祝你好运!
您当前正在检查REFERENCE到两个对象,并检查它们是否相等,但它们显然不相等。你想做的是检查他们的内容和序列是否相等,为此他们发明了令人敬畏的函数.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"
。