首页 文章

在C#getter中使用StringBuilder会特别糟糕吗?

提问于
浏览
0

getter将获得有关它所在的struct的状态的消息,它由struct的属性的组合定义,这些属性是有限的 .

首先,这不是关于micro-optimization,我只是认为:

StringBuilder msg = new StringBuilder();
...
msg.AppendLine("static string");
...

看起来更清洁:

String msg = String.Empty;
...
msg = String.Concat(msg, "static string", System.Environment.NewLine)
...

所以只是一种美学选择 .

msg变量必须以任何方式初始化为空,因此额外的行不会给我带来麻烦 . 但是在返回字符串的字段中构造一个新的StringBuilder有多糟糕?

EDIT 我只是想知道将一个StringBuilder构造函数放入一个getter中是否会打开一大堆蠕虫,开头是荒谬的,有些人从来没有在getter中使用构造函数那种反模式的东西等等...不知道每个人的最喜欢连接非循环字符串的最佳方式 .

EDIT2 getter的常用,最佳实践,性能阈值是什么,StringBuilder构造函数是否低于该值?

4 回答

  • 1

    为什么不这样做?

    msg + "static string" + Environment.NewLine
    

    它将编译为与第二个示例相同的内容 .

    Update

    您更改了代码,以便您想要创建包含大量行的非常大的字符串 .

    然后我觉得使用 StringBuilder 没关系,但是我建议你把它变成 method (如何覆盖 ToString ?)而不是属性,以便调用者不太可能认为调用便宜 .

  • 0

    从性能的角度来看,使用提供的数据(三个子字符串),String.Concat更好 .

    但是,如果在getter中,你有像 if(state == 0) 这样的行来破坏Concat或运算符的效率,那么就使用StringBuilder来提高字符串内存处理的效率,以及它在AppendLine上的清晰语法 . 查看this site获取有关 StringBuilder vs Concat vs + 的数据以及有关StringBuilder tipsmistakes的一些信息

  • 0

    String.Concat函数在不使用大量字符串时优于StringBuilder 2.3倍 . 另外,例如,如果您编写类似“a”“b”“c”“d”“f”的代码,编译器将编译它以在IL代码中使用string.Concat(string []) .

  • 5

    除了现在应该说的答案,考虑到你认为你是1000s,但是......),重要的是提到事实,在现有的语义中差异不是 only ,而是在实际的功能上 .

    更短更清晰:

    每次调用 +string.Concat 都会创建一个新的字符串对象 .

    如果使用 StringBuilder ,则它会在一个字符串缓冲区上运行 . 因此,从性能的角度来看,如果你有一个很长的字符串可以使用 StringBuilder ,这是非常方便的 .

相关问题