1

正如标题所暗示的那样,有什么理由我不应该执行以下操作将某些内容附加到字符串的末尾:

string someString = "test";
someString += "Test";
4

3 回答 3

6

如果做一次,没什么大不了的。获取两个字符串的内容,创建一个新字符串并将其分配给someString. 如果你多次执行上述操作(例如,在一个循环中),那么就有问题了。对于每次执行,您都在堆中分配一个新对象,一个新的字符串实例。这就是为什么最好使用基于缓冲区的类型,例如StringBuilder,如果您必须多次将内容附加到字符串。

于 2013-01-15T03:04:24.523 回答
3

如果您执行以下操作:

var s = "abc";
s += "def";
s += "ghi";

(或多或少)发生的是,在第 2 行,在创建新字符串时,将 的内容abc复制到其中,然后将 的内容def复制到其中,然后将这个新字符串 ( abcdef) 分配给多变的。

然后在第 3 行,创建另一个新字符串,将变量 ( ) 的先前值的内容abcdef复制到其中,ghi然后将结果分配给变量。

+=如果您反复执行此操作,您可以看到字符串的开头在每次操作中都被一次又一次地复制。在建立长字符串的循环中,这可能会产生影响。这可以通过使用 aStringBuilder或 a List<string>with来优化string.Concat(),这样您就只能复制最终结果的每个部分一次(或其他与循环迭代次数无关的常数)。

于 2013-01-15T03:14:22.630 回答
0

你的方法会很好用。您可以使用 StringBuilder 作为替代方案。

var sb = new StringBuilder();
sb.Append("Foo");
sb.Append(" - ");
sb.Append("Bar"); 

string someString = sb.ToString();
于 2013-01-15T03:09:50.297 回答