从属性返回字符串连接的最有效方法

4

我在这里阅读了一些帖子,共同的建议是,如果要连接三个字符串以上,则stringbuilder是最有效的。

所有变量都是其他属性。

public string Summary
{
  get 
  {
    return Name.Replace("_", " ") + "<strong>[" + Total + " Devices - " + BadCount + " Offline, " + PendingCount + " Pending]</strong>";
  }
}

我要拼接四个字符串,使用简单的连接符合适吗?还是应该使用StringBuilder?感觉用后者有点杀鸡焉用牛刀。


2
你知道你实际上是在连接8个字符串吗?每一个+都是一个连接操作。 - Destrictor
3
这看起来更适合使用 string.Format - leppie
你能提供一个链接证明StringBuilder的效率最低为3个字符串吗? - slugster
C#编译器不会自动将+连接转换为StringBuilder调用吗(就像Java一样)? - Sebastian Krysmanski
Jon Skeet: 高效地连接字符串 - slugster
显示剩余4条评论
2个回答

8

在这种情况下,请使用最易读的方式。否则就会是过早优化

我会使用String.Format

String result = String.Format("{0}<strong>[{1} Devices - {2} Offline, {3} Pending]</strong>"
, Name.Replace("_", " ")
, Total
, BadCount
, PendingCount);
return result;

即使字符串拼接也不会太糟糕,因为字符串存储在内部池中。因此,如果您再次使用字符串,则不会创建字符串,而是使用已经可用的引用。
所以作为经验法则:
- 如果您正在连接几个字符串,并且代码难以理解,请使用String.Format - 如果您正在连接几个(文字)字符串,并且代码仍然可读,请使用+(字符串连接) - 如果您正在使用变量字符串在(长)循环中创建字符串,请使用StringBuilder

3
这让我想起了这句话:“你应该更关心代码的可维护性和可读性,而不是它的性能。”在这个例子中,性能差异几乎不存在。 - BBQ
谢谢你的回答,我会使用字符串格式,并接受你的答案作为额外信息。 - DavidB

2
使用String.Format函数。
public string Summary
{
  get 
  {
    return String.Format(
        "{0}<strong>[{1} Devices - {2} Offline, {3} Pending </strong>",
        Name.Replace("_", " "), Total, BadCount, PendingCount);
  }
}

4
为什么?除了整洁外,与连接相比它还提供什么性能优势?(请注意,这并不是质疑你的回答,你只需要比说“使用string.Format()”更好。) 为什么要使用string.Format(),除了让代码更整洁外,它在性能方面是否有其他优势呢? - slugster
String.Format 使用了一个 StringBuilder。它可能更整洁,但我怀疑它是否更快。 - Tim M.
2
迄今为止最好的方法。String.Format()被优化了,它还允许您通过将格式字符串放入资源中轻松提供本地化支持。无论如何,您都应该这样做,即使您不打算本地化内容。 - Matthew Watson
很棒的答案,这就是我将要使用的方法。 - DavidB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接