【问题标题】:StringBuilder value and String value can't be compared correctlyStringBuilder 值和 String 值无法正确比较
【发布时间】:2017-03-14 22:09:05
【问题描述】:

我试图比较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# string compare stringbuilder


【解决方案1】:

C# 中的大多数类型只有在它们是相同类型的情况下才会相等,以及其他要求。每种类型都可以定义自己的 Equals 方法,该方法控制相等对于该类型的含义。

在这里,您想比较 reverse.ToString()inputStringStringBuilder.ToString() 以字符串形式返回实例的内容。

【讨论】:

    【解决方案2】:

    正如其他人指出的那样,您的两个实体不是同一类型。

    现在Equals() 方法是每个object 上的一个方法Object.Equals()

    由于Object.Equals() 接受object 并且不受类型限制,您可以将任何object 与任何其他object 进行比较。

    MSDN 备注

    Equals 的默认实现支持引用类型的引用相等,以及值类型的按位相等。引用相等意味着被比较的对象引用指向同一个对象。按位相等意味着被比较的对象具有相同的二进制表示。

    现在可以重写此方法,因为它是一个virtual 方法,允许开发人员将不同的对象类型与当前对象类型进行比较。

    回答您的问题:

    即使它们具有相同的值,为什么我的函数返回 false?

    由于StringBuilder 不是String,结果将始终为false引用相等意味着被比较的对象引用指向同一个对象。

    真正问题的答案

    如何比较 StringBuilder 的内容是否等于字符串。

    正如其他人指出的那样,您需要做的就是调用StringBuilder.ToString() 方法来生成要比较的字符串。

    作为return (reverse.ToString().Equals(inputString));

    【讨论】:

    • 非常感谢,我不知道 Equals() 是如何工作的。我学到的比我问的要多。
    • @korem7 很高兴你有。更好地理解为什么它们相等,然后如何使它们相等。
    【解决方案3】:

    您必须先将StringBuilder 设为字符串。

    return (reverse.ToString().Equals(inputString));
    

    【讨论】:

      【解决方案4】:

      我尝试比较 StringBuilder 值和 String 值。即使它们具有相同的值,为什么我的函数返回 false?

      简单来说StringBuilderstring不是同一个types

      StringBuilder 必须转换为 string 才能与另一个 string 进行比较。这可确保您比较相同的types

      改变这个:

      return (reverse.Equals(inputString));
      

      对此:

      return (reverse.ToString().Equals(inputString));
      

      【讨论】:

        猜你喜欢
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 2021-09-03
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多