StringBuilder是否需要ToString()

时间:2012-02-15 10:27:42

标签: c# stringbuilder

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

StringBuilder sb = new StringBuilder();

我像这样附加到我的StringBuilder:

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

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

string foobar = sb;

或者像这样:

string foobar = sb.ToString();

前者是懒惰还是后者添加的代码多于必要的代码?

由于

9 个答案:

答案 0 :(得分:10)

在Java中,除了规范中的内容之外,您无法定义类型之间的隐式转换 - 因此无论如何都无法从StringBuilder转换为String;你必须致电toString()

在C#中,可以StringBuilderString之间隐式的用户定义转换(在StringBuilderString中定义),但是没有 - 所以你仍然需要拨打ToString()

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

答案 1 :(得分:2)

在Java中,string foobar = sb;将无法编译。您必须使用String foobar = stringBuilder.toString();

答案 2 :(得分:2)

在C#中,您需要使用string foobar = sb.ToString();,否则您将收到错误消息:Cannot implicitly convert type 'System.Text.StringBuilder' to 'string'

答案 3 :(得分:1)

你可以在问之前对它进行测试......你会看到那个

string foobar = sb;

没有编译(C#)。

使用sb.ToString()

答案 4 :(得分:0)

String foobar = sb.ToString();
应该使用

。这会将StringBuilder转换为String,然后分配值。

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

转换为String所需的StringBuilder 中的ToString()。

String str=sb.toString();

答案 8 :(得分:0)

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