Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法正确比较StringBuilder值和字符串值_C#_String_Compare_Stringbuilder - Fatal编程技术网

C# 无法正确比较StringBuilder值和字符串值

C# 无法正确比较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

我尝试比较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设置为字符串

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是如何工作的。“我学到的比我要求的要多。”科雷姆很高兴你学到了。更好地理解他们为什么不平等,然后如何使他们平等。