【发布时间】:2014-03-22 08:11:09
【问题描述】:
对于 StringBuilder 类,为什么不重载 += 运算符而不是使用唯一的 .Append() 方法?
Append() 只连接字符串,为什么它们不只是像这样重载 += 运算符:
StringBuilder sb = new StringBuilder();
sb += "My string";
这是效率的例子吗? 这是惯例还是直觉?
谢谢,
【问题讨论】:
-
因为...那它和字符串一样吗?这就像在问为什么
Lists 没有 += 来添加对象...... -
那么为什么要有一个字符串生成器类呢?
-
我希望我的评论能暗示我对 Shahar 的例子有多么不满意。
-
@PeonProgrammer - string += string 不是连接。这是串联和赋值。字符串是不可变的,因此 string += string 创建了第三个字符串,它是两个字符串连接在一起,然后用这个新字符串覆盖原始字符串变量。另一方面,Stringbuilder 是可变字符串操作,因此 .Append() 不会创建新字符串来替换旧字符串。这样做会抵消 Stringbuilder 的好处。所以你的问题基本上是,为什么 Stringbuilder 不像一个字符串?答案是因为它不是字符串,而是 Stringbuilder
-
你从我这里得到了一个赞成票,因为你的问题对于新程序员理解 Eric Lippert 的答案非常重要。新程序员犯这种错误的次数太多了。
标签: c#