C# StringBuilder是否需要字符串()

C# StringBuilder是否需要字符串(),c#,stringbuilder,C#,Stringbuilder,这应该是一个快速的。我有这样一个StringBuilder: StringBuilder sb = new StringBuilder(); sb.Append("Foo"); sb.Append("Bar"); string foobar = sb.ToString(); 我将如下内容附加到我的StringBuilder: StringBuilder sb = new StringBuilder(); sb.Append("Foo"); sb.Append("Bar"); strin

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

StringBuilder sb = new StringBuilder();
sb.Append("Foo");
sb.Append("Bar");
string foobar = sb.ToString();
我将如下内容附加到我的StringBuilder:

StringBuilder sb = new StringBuilder();
sb.Append("Foo");
sb.Append("Bar");
string foobar = sb.ToString();
然后我想让它等于一个字符串变量。我是否这样做:

string foobar = sb;
或者像这样:

StringBuilder sb = new StringBuilder();
sb.Append("Foo");
sb.Append("Bar");
string foobar = sb.ToString();
前者是懒惰,还是后者添加了过多的代码

谢谢

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


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

在Java中,
字符串foobar=sb无法编译。您必须使用
String foobar=stringBuilder.toString()

您可以在询问之前测试它。。。你会看到的

string foobar = sb;
不编译(C#)


在Java中使用
sb.ToString()

,除了规范中的内容之外,您无论如何都不能定义类型之间的隐式转换,因此您无论如何都不能从
StringBuilder
转换为
String
;您必须调用
toString()

在C#中,
StringBuilder
String
(在
StringBuilder
String
中定义)之间可能存在一个隐式的用户定义转换,但是没有-因此您仍然必须调用
ToString()


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

在C#中,需要使用
string foobar=sb.ToString()
或您将得到一个错误:
无法将类型“System.Text.StringBuilder”隐式转换为“string”

前面的答案是正确的,只是为了澄清一些问题
StringBuilder
不是
String
的子类,因此不能从
StringBuilder
转换为
String
StringBuilder
toString()
方法生成一个
String
对象,因此您应该使用它将
StringBuilder
转换为
String
。希望这能有所帮助。

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

ToString()在中需要转换为字符串

String str=sb.toString();

在Java中,所有对象都具有从对象超类继承的toString()。StringBuilder(SB)是可变的,String不是。将SB(可变)分配给字符串(不可变)需要复制内部字符缓冲区并返回一个不可变字符串实例。

抱歉,我认为这两种方法都适用相同的原则!懒惰的地方在于,你不能同时尝试两种方法,却发现其中一种方法不起作用-1公平地说,我这样问是因为我在使用StreamWriter,并注意到它在使用或不使用.ToString()时都能工作。我不认为这可能是StreamWriter方法的过载,我看到了,在这种情况下,调用时请关闭
ToString()
。在最坏的情况下,超负荷将为您调用它,在最好的情况下,它可能有一些聪明的优化。但是无论哪种方式,语言设计者都会为了您的利益添加重载,所以最好使用它。您也不能将
StreamWriter
隐式转换为
string
。并且调用
.ToString()
不会给出编写器的内容。