c# - 为什么微软不为 stringbuilder 重载 += 运算符?

标签 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/

相关文章:

c# - 将多条表单输入保存到文件中

c# - Clean Architecture 中的 'Use Case Interactor' 和 'Service' 有什么区别?

c# - Silverlight - 命名空间中不存在 ViewModelLocator

c# - 从另一个方法调用 EventHandler

c# - JsonResult 在 ASP.NET CORE 2.1 中返回 Json

c# - 更改程序集/文件版本后保留用户设置

c# - 在 TabControl 中设置 DataContext

c# - MVVM动态UserControl创建

c# - 如何同步两个多行文本框的滚动?

c# - 基于查询参数的 WCF REST 服务 url 路由