StringBuilder 值和 String 值无法正确比较

StringBuilder value and String value can't be compared correctly

我试图比较 StringBuilder 值和 String 值。即使它们具有相同的值,为什么我的函数 returns 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));

}

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

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

I tried to compare StringBuilder value and String value. Even though they have same value why my function returns false?

简单来说,StringBuilderstring不一样types

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

改变这个:

return (reverse.Equals(inputString));

到这个:

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

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

在这里,您想将 reverse.ToString()inputString 进行比较。 StringBuilder.ToString() returns 字符串形式的实例内容。

正如其他人所指出的,您的两个实体不是同一类型。

现在 Equals() 方法是每个 object 作为 Object.Equals() 的方法。

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

MSDN 备注

The default implementation of Equals supports reference equality for reference types, and bitwise equality for value types. Reference equality means the object references that are compared refer to the same object. Bitwise equality means the objects that are compared have the same binary representation.

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

回答你的问题:

Even though they have same value why my function returns false?

因为 StringBuilder 不是 String 结果总是 false引用相等意味着被比较的对象引用引用同一个对象。

真正问题的答案

How can I compare if a StringBuilder contents is Equal to a string.

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

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