StringBuilder值和String值无法正确比较

时间:2017-03-14 22:09:06

标签: c# string compare stringbuilder

我尝试比较StringBuilder值和String值。即使它们具有相同的值,为什么我的函数返回false?

bool checkPalindrome(string inputString)
{

    StringBuilder reverse = new StringBuilder();
    char[] inputStringArray = inputString.ToCharArray();

    for (int i = inputStringArray.Length - 1; i >= 0; i--)
    {
        char letter = inputStringArray[i];
        reverse.Append(letter);
    }

    return (reverse.Equals(inputString));

}

4 个答案:

答案 0 :(得分:1)

C#中的大多数类型只有在相同类型和其他要求之间才相等。每种类型都可以定义自己的Equals方法,该方法控制该类型的相等性。

在此,您要将reverse.ToString()inputString进行比较。 StringBuilder.ToString()以字符串形式返回实例的内容。

答案 1 :(得分:1)

正如其他人所指出的那样,你的所有人都不是不是相同的类型。

现在,Equals()方法是每个objectObject.Equals()的方法。

由于Object.Equals()接受object且未受类型约束,您可以将任何object与任何其他object进行比较。

MSDN备注

  

Equals的默认实现支持引用类型的引用相等性和值类型的按位相等性。引用相等意味着被比较的对象引用引用相同的对象。按位相等意味着被比较的对象具有相同的二进制表示。

现在可以覆盖此方法,因为它是virtual方法,允许开发人员将不同的对象类型与当前对象类型进行比较。

回答您的问题:

  

即使它们具有相同的值,为什么我的函数返回false?

由于StringBuilder不是String,结果将始终为false; 引用相等意味着被比较的对象引用引用同一个对象。

回答真实问题

  

如何比较StringBuilder内容是否等于字符串。

正如其他人指出的那样,您需要调用StringBuilder.ToString()方法来生成要比较的字符串。

作为return (reverse.ToString().Equals(inputString));

答案 2 :(得分:0)

您必须先将StringBuilder作为字符串。

return (reverse.ToString().Equals(inputString));

答案 3 :(得分:0)

  

我试图比较StringBuilder值和String值。即使它们具有相同的值,为什么我的函数返回false?

简而言之,StringBuilderstring不是types

StringBuilder必须转换为string才能将其与另一个string进行比较。这可以确保您比较相同的types

改变这一点:

return (reverse.Equals(inputString));

到此:

return (reverse.ToString().Equals(inputString));