【问题标题】:Does StringBuilder need ToString()StringBuilder 是否需要 ToString()
【发布时间】:2012-02-15 10:27:41
【问题描述】:

希望这应该是一个快速的。我有一个这样的 StringBuilder:

StringBuilder sb = new StringBuilder();

我像这样附加到我的 StringBuilder:

sb.Append("Foo");
sb.Append("Bar");

然后我想让它等于一个字符串变量。我这样做是不是这样:

string foobar = sb;

或者像这样:

string foobar = sb.ToString();

是前者懒惰还是后者添加了不必要的代码?

谢谢

【问题讨论】:

  • 抱歉,我认为两者都适用相同的原则!
  • 懒惰的是你不能两个都试了,结果一个不行-1
  • 公平地说,我问是因为我使用的是 StreamWriter 并注意到它可以使用或不使用 .ToString(),我不认为这可能是 StreamWriter 方法的重载
  • 我明白了,在这种情况下,打电话时请关闭ToString()。在最坏的情况下,过载会为您调用它,最好的情况下它可能会进行一些巧妙的优化。但无论哪种方式,语言设计者都为了您的利益添加了重载,所以不妨使用它。
  • 您也不能从StreamWriter 隐式转换为string。并且调用.ToString() 不会给你作者的内容。

标签: c# stringbuilder


【解决方案1】:

在 Java 中,您无论如何都不能定义类型之间的隐式转换,超出规范中的规定 - 所以无论如何您都不能从 StringBuilder 转换为 String;你必须打电话给toString()

在 C# 中,可能StringBuilderString(在 StringBuilderString 中定义)之间存在隐式用户定义转换,但没有 - 所以你还是得打ToString()

在这两种情况下,如果您调用相关方法,您都会收到编译时错误。

【讨论】:

    【解决方案2】:

    在C#中你需要使用string foobar = sb.ToString();,否则你会得到一个错误:Cannot implicitly convert type 'System.Text.StringBuilder' to 'string'

    【讨论】:

      【解决方案3】:

      在 Java 中,string foobar = sb; 不会编译。你必须使用String foobar = stringBuilder.toString();

      【讨论】:

        【解决方案4】:

        您可以在询问之前对其进行测试...您会看到的

        string foobar = sb;
        

        无法编译 (C#)。

        使用sb.ToString()

        【讨论】:

          【解决方案5】:

          以前的答案是正确的,只是为了澄清一些事情。 StringBuilder 不是String 的子类,因此您不能从StringBuilder 转换为StringStringBuildertoString() 方法会生成一个 String 对象,因此您应该使用它从 StringBuilder“转换”到 String。希望这会有所帮助。

          【讨论】:

            【解决方案6】:

            在转换为 String 时,请在 Java 中使用 toString。 (C# 中的ToString

            【讨论】:

              【解决方案7】:

              ToString() in StringBuilder 需要转换为字符串。

              String str=sb.toString();
              

              【讨论】:

                【解决方案8】:
                String foobar = sb.ToString();
                

                应该使用。因为这会将StringBuilder 转换为String,然后分配值。

                使用字符串 foobar = sb;会给你一个编译时错误“无法将类型隐式转换为”

                【讨论】:

                  【解决方案9】:

                  在 Java 中,所有对象都有 toString(),继承自 Object 超类。 StringBuilder (SB) 是可变的,String 不是。将SB(可变)赋值给String(不可变)需要复制内部的char缓冲区,并返回一个不可变的String实例。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-11-06
                    • 2012-01-27
                    • 2021-07-26
                    相关资源
                    最近更新 更多