C# 无法正确比较StringBuilder值和字符串值
我尝试比较StringBuilder值和字符串值。即使它们具有相同的值,为什么我的函数返回falseC# 无法正确比较StringBuilder值和字符串值,c#,string,compare,stringbuilder,C#,String,Compare,Stringbuilder,我尝试比较StringBuilder值和字符串值。即使它们具有相同的值,为什么我的函数返回false bool checkPalindrome(string inputString) { StringBuilder reverse = new StringBuilder(); char[] inputStringArray = inputString.ToCharArray(); for (int i = inputStringArray.Length - 1; i
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));
我尝试比较StringBuilder值和字符串值。即使它们具有相同的值,为什么我的函数返回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和string不是相同的类型
StringBuilder必须转换为字符串,以便与另一个字符串进行比较。这可以确保您正在比较相同的类型
更改此项:
为此:
除其他要求外,C中的大多数类型只有在它们是相同类型时才会相等。每个类型都可以定义自己的Equals方法,该方法控制Equals对该类型的含义
在这里,您需要将reverse.ToString与inputString进行比较。StringBuilder.ToString以字符串形式返回实例的内容。正如其他人指出的那样,您的两个实体不是相同的类型 现在Equals方法是一种针对每个对象的方法 作为Object.Equals接受一个对象,并且不受类型限制,您可以将任何对象与任何其他对象进行比较 MSDN备注 Equals的默认实现支持引用类型的引用相等,以及值类型的位相等。引用相等是指被比较的对象引用引用同一对象。按位相等意味着被比较的对象具有相同的二进制表示 现在可以重写此方法,因为它是一个虚拟方法,允许开发人员将不同的对象类型与当前的对象类型进行比较 回答你的问题: 即使它们具有相同的值,为什么我的函数返回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不是字符串,因此结果将始终为false;引用相等是指被比较的对象引用引用同一对象
真正问题的答案
如何比较StringBuilder内容是否等于字符串
正如其他人所指出的,您所需要做的就是调用StringBuilder.ToString方法来生成一个要比较的字符串
As返回reverse.ToString.equalInputString 顺便说一句,您的反转逻辑将无法用于合成字符,如:撸撸撸撸撸。反向字符串将是而不是的。感谢您的警告,我将尝试改进。非常感谢,我不知道Equals是如何工作的。“我学到的比我要求的要多。”科雷姆很高兴你学到了。更好地理解他们为什么不平等,然后如何使他们平等。