<分区>
对于 StringBuilder 类,为什么不重载 += 运算符而不是使用独特的 .Append() 方法?
Append() 只连接字符串,所以为什么它们不像这样重载 += 运算符:
StringBuilder sb = new StringBuilder();
sb += "My string";
这是效率问题吗? 这是惯例还是直觉?
谢谢,
标签 c#
<分区>
对于 StringBuilder 类,为什么不重载 += 运算符而不是使用独特的 .Append() 方法?
Append() 只连接字符串,所以为什么它们不像这样重载 += 运算符:
StringBuilder sb = new StringBuilder();
sb += "My string";
这是效率问题吗? 这是惯例还是直觉?
谢谢,
最佳答案
算术运算应仅限于类似于算术值的类型。两个字符串的总和是第三个字符串就够糟糕的了。将加法运算与字符串连接混为一谈是一个有问题的选择,因为字符串连接很少遵循加法规则;特别是 a + b != b + a
.
但是去那里寻找字符串builders——根据定义可变状态而不是算术值——是可怕的强>。 两个事物的总和应该是不同于两个被加数的第三个事物。即a += b
必须与a = a + b
具有相同的语义而不是 a.MutateWith(b)
. 如果没有分配给 a
最后,复合赋值是错误的运算符。
更一般地说:永远不要做可爱的运算符重载。运算符重载是为了让两个复数与第三个复数相加,而不是为了让一个顾客加上一 jar 花生酱等于一个采购订单,或者类似的愚蠢行为。
关于c# - 为什么微软不为 stringbuilder 重载 += 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923816/