StringBuilder需要使用ToString()吗?

5

希望这会很快。我有一个StringBuilder,像这样:

StringBuilder sb = new StringBuilder();

我会往StringBuilder中添加内容,方法如下:

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

我现在想把它变成一个字符串变量。我应该这样做吗:

我然后希望将其赋值给一个字符串变量。我应该这样做吗:

string foobar = sb;

或者这样:
string foobar = sb.ToString();

前者是懒惰,还是后者增加了不必要的代码?谢谢。

1
抱歉,我以为两者都适用相同的原则! - JMK
6
你太懒了,不愿意尝试两种方法,看看哪一种不起作用。-1 - weston
1
公平地说,我问这个问题是因为我正在使用StreamWriter,并注意到它在有或没有使用.ToString()的情况下都可以工作,我没有想到这可能是StreamWriter方法的重载。 - JMK
1
你也不能隐式地将StreamWriter转换为string。调用.ToString()也无法返回写入器的内容。 - Magnus
1
@Magnus 他的意思是他正在调用 StreamWriter.Write(object value) 方法,并将一个 StringBuilder 作为他的 value - weston
显示剩余2条评论
10个回答

14

在Java中,你无法隐式地定义类型转换,除了规范中规定的内容。因此,你无法将StringBuilder转换为String,必须调用toString()方法。

在C#中,StringBuilderString之间可能存在一个隐式的用户定义转换(定义在StringBuilderString中),但实际上并没有这样的转换操作,因此你仍然需要调用ToString()方法。

在两种情况下,如果你不调用相应的方法,编译时会出现错误提示。


7
在C#中,您需要使用 string foobar = sb.ToString(); 否则会出现错误:Cannot implicitly convert type 'System.Text.StringBuilder' to 'string'

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

2
您在提问之前可以先进行测试,这样您就会发现……
string foobar = sb;

C#编译错误。

使用sb.ToString()


1
String foobar = sb.ToString();

应该使用 ToString() 方法将 StringBuilder 转换为 String 并赋值。

使用 string foobar = sb; 会导致编译时错误 "无法将类型隐式转换为 "


1

StringBuilder中的ToString()方法需要将其转换为字符串。

String str=sb.toString();

1

之前的回答是正确的,只是为了澄清一些事情。 StringBuilder 不是 String 的子类,因此您无法从 StringBuilder 转换为 StringStringBuildertoString() 方法生成一个 String 对象,因此您应该使用它来将 StringBuilder 转换为 String。希望这可以帮助到您。


1

在编程中,将对象转换为字符串时,请使用Java中的toString方法(在C#中使用ToString方法)。


1
在Java中,所有对象都有toString()方法,这是从Object超类继承而来的。StringBuilder(SB)是可变的,而String则不是。将SB(可变)赋值给String(不可变)需要复制内部字符缓冲区并返回一个不可变的String实例。

0
所有之前的答案都是正确的。然而,我想强调另一种用法,在某些情况下可能会很有用。当转换为字符串时,我们可以使用内置的静态函数/实用程序,例如。
C#
string str = Convert.ToString(sb);

Java

String str = String.valueOf(sb);

这在编程中非常有用,当输入的 "sb" 可能为空时,代码希望能够优雅地处理它,而不会引发空指针异常,并避免像以下代码一样:
if (sb == null) 
   return "null";
else
   return sb.toString()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接