C# StringBuilder是否需要字符串()
这应该是一个快速的。我有这样一个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 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()
不会给出编写器的内容。