使用string.Format来处理简单的事情?

Ger*_*nck 4 .net string-concatenation string-formatting

在我早期的.Net编程时代,我只将string.Format()用于复杂的字符串连接,例如将字符串编译为

客户订单234日期为2/2/2002,付款ID为55543.

但是现在我几乎每个字符串连接都使用string.Format,也就是简单的字符串连接,比如在字符串前加上一些东西.

Console.WriteLine(string.Format("\t\t{0}", myString));
Run Code Online (Sandbox Code Playgroud)

这有什么可能的开销吗?也许我应该使用常规+运算符来执行这些简单的操作?

你对此有何看法?

Ahm*_*eed 5

对于简单的字符串连接,请使用该+方法.对于不需要格式的简单事物来说更清楚.

对于具有特定格式的更复杂的字符串,以及保留整个字符串的结构并为输入提供占位符有用的用法String.Format.

是的,有一个开销.String.Format在封面下使用StringBuilder.在这些情况下,简单的字符串连接会更快.可以很容易地找到关于此主题的几个基准和博客文章.当然这一切都取决于你的用法.如果循环中出现小的字符串连接,那么重复使用String.Format可能比简单的连接更明显+.如果你在循环中构建一个字符串,那么经典的例子是首选,StringBuilder并且可以在SO上找到关于concat与StringBuilder的相关问题.

编辑:澄清一下,这没什么用处:String.Format("{0}{1}", a, b)因为格式不多.这很简单a + b.不幸的是,我在生产代码中遇到了这样的例子,一看到String.Format,我希望看到某些东西需要以某种方式构建,而不是简单的连接.

OTOH,考虑一下这个电话号码:"(" + area + ") " + number + " x" + extension- 有太多的事情要进行修改并不容易.在这种情况下,String.Format是可取的:String.Format("({0}) {1} x{2}", area, number, extension).这仍然是一个微不足道的例子,但你明白了.