“ ==”始终返回true。 Anagram程序

时间:2018-07-24 12:28:33

标签: c# anagram

我做了一个简单的函数,可以通过排序和比较排序后的值来检查两个单词是否是一个字谜,但是即使这些单词不是字谜,该程序也始终返回true。如果删除.ToString(),它将评估为false。知道为什么要这样做以及如何解决这个问题吗?

public bool anagram(string word1, string word2)
    {
        char[] word1Arr = word1.ToArray();
        char[] word2Arr = word2.ToArray();

        Array.Sort(word1Arr);

        Array.Sort(word2Arr);

        Console.WriteLine(word1Arr);
        Console.WriteLine(word2Arr);

        if (word1Arr.ToString() == word2Arr.ToString())
        {
            return true;
        }
        else
        {
            return false;
        }


    }

2 个答案:

答案 0 :(得分:8)

替换

if (word1Arr.ToString() == word2Arr.ToString())

使用

if (word1Arr.SequenceEqual(word2Arr))

比较数组的内容-因为word1Arr.ToString()返回"System.Char[]",比较结果存入

"System.Char[]" == "System.Char[]" 

始终为真

答案 1 :(得分:2)

您还可以使用此比较:

if(new string(word1Arr) == new string (word2Arr))

ToString方法在char[]中具有默认实现,返回类型为System.Char[]的名称,这就是为什么在比较两个char[]时得到真假的原因。

与其他答案相比:我的方法创建了string类的两个额外实例,而另一个答案在不创建额外对象的情况下比较了数组。