无法正确比较字符串生成器值和字符串值



我尝试比较 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));
}

C#中的大多数类型仅在其他要求等要求时才相等。每种类型都可以定义自己的平等方法,该方法控制平等对该类型的含义。

在这里,您要将reverse.ToString()inputString进行比较。StringBuilder.ToString()将实例的内容返回为字符串。

正如其他人指出的那样,您的两个Entites都是不是相同的类型。

现在,Equals()方法是每个object的方法,即Object.Equals()

Object.Equals()接受object,而不是类型的绑定,您可以将任何object与任何其他object进行比较。

msdn备注

平等的默认实现支持参考类型的参考平等以及值类型的位相等性。参考平等是指比较的对象引用参考同一对象。位平等意味着被比较的对象具有相同的二进制表示。

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

回答您的问题:

即使它们具有相同的价值,为什么我的功能返回false?

由于StringBuilder不是String,结果将始终为false参考平等是指被比较的对象引用,请参考同一对象。

回答真实问题

我如何比较字符串构造的内容是否等于字符串。

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

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

您必须先使StringBuilder成为字符串。

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

我尝试比较StringBuilder值和字符串值。即使它们具有相同的价值,为什么我的功能返回false?

简单地说,StringBuilderstring不是同一types

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

更改以下内容:

return (reverse.Equals(inputString));

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

相关内容

  • 没有找到相关文章

最新更新