对于StringBuilder类,为什么不重载+ =运算符而不是使用唯一的.Append()方法?
Append()只连接字符串,为什么它们不只是像这样重载+ =运算符:
StringBuilder sb = new StringBuilder();
sb += "My string";
Run Code Online (Sandbox Code Playgroud)
这是效率的情况吗?是惯例还是直觉?
谢谢,
Eri*_*ert 29
算术运算应限于类似于算术值的类型.两个字符串的总和是第三个字符串是很糟糕的.将加法操作与字符串连接相关联是一个值得怀疑的选择,因为字符串连接遵循很少的加法规则; 特别是a + b != b + a.
但要去那里的字符串构建器 - 根据定义可变状态而不是算术值 - 是可怕的.两件事的总和应该是与两个加法不同的第三件事.也就是说,a += b 必须有相同的语义a = a + b,而不是a.MutateWith(b).如果最后没有赋值,a那么复合赋值是错误的运算符.
更一般地说: 永远不要让可爱的操作员超载.操作员超载是存在的,这样你可以将两个复杂的数字添加到第三个,而不是让你可以让顾客加一罐花生酱等于采购订单,或者一些这样的愚蠢.
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |