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?
简单来说,StringBuilder
和string
不一样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));
我试图比较 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?
简单来说,StringBuilder
和string
不一样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));