我尝试比较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));
}
答案 0 :(得分:1)
C#中的大多数类型只有在相同类型和其他要求之间才相等。每种类型都可以定义自己的Equals方法,该方法控制该类型的相等性。
在此,您要将reverse.ToString()
与inputString
进行比较。 StringBuilder.ToString()
以字符串形式返回实例的内容。
答案 1 :(得分:1)
正如其他人所指出的那样,你的所有人都不是不是相同的类型。
现在,Equals()
方法是每个object
上Object.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?
简而言之,StringBuilder
和string
不是types
。
StringBuilder
必须转换为string
才能将其与另一个string
进行比较。这可以确保您比较相同的types
。
改变这一点:
return (reverse.Equals(inputString));
到此:
return (reverse.ToString().Equals(inputString));