"==" 总是返回 true。字谜程序[重复]

Posted

技术标签:

【中文标题】"==" 总是返回 true。字谜程序[重复]【英文标题】:"==" always returning true. Anagram program [duplicate] 【发布时间】:2019-01-01 01:52:23 【问题描述】:

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

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;
        


    

【问题讨论】:

你检查过word1Arr.ToString()的输出是什么吗? 如果您能提供Minimal, Complete, and Verifiable example,那就太好了。特别是您的数据样本会有所帮助。 @AyJay 调试和进入代码更容易 @AyJay 没有更深层次的潜在问题。您没有检查正在比较的内容,否则您会看到它是"System.Char[]" @AyJay 如果您确实对其进行了调试,您会注意到word1Arr.ToString() 不会返回您认为返回的内容。 【参考方案1】:

替换

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

if (word1Arr.SequenceEqual(word2Arr))

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

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

总是正确的

【讨论】:

【参考方案2】:

你也可以使用这个比较:

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

ToString 方法在char[] 中具有默认实现,返回类型为System.Char[] 的名称,这就是为什么当您比较两个char[] 时会得到正确的结果。

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

【讨论】:

以上是关于"==" 总是返回 true。字谜程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥一个变量对多个值的不等式检查总是返回真?

为啥一个变量对多个值的不等式检查总是返回真?

getRequestProperty("Authorization") 总是返回 null

getRequestProperty("Authorization") 总是返回 null

Authorize(Roles = "Admin") 总是返回 ACCESS DENIED

为啥 "abcd".StartsWith("") 返回 true?