我尝试比较 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?
简单地说,StringBuilder
和string
不是同一types
。
StringBuilder
必须转换为string
,以将其与另一个string
进行比较。这样可以确保您比较相同的types
。
更改以下内容:
return (reverse.Equals(inputString));
:
return (reverse.ToString().Equals(inputString));