在我的早期.NET编程天,我使用的String.format()只为复杂的字符串连接,例如编译字符串作为

问题的客户订单日期2002年2月2日和支付ID 55543的234。

但现在我使用的String.format,几乎每一个字符串连接我必须做的,也是简单的,如前缀字符串的东西。

Console.WriteLine(string.Format("\t\t{0}", myString));

是否有任何这可能开销?也许我应该使用常规+运营商做这些简单的操作?

你对这次你的意见?

有帮助吗?

解决方案

有关简单字符串串联使用+方法。这是一个简单的事情,不需要格式清晰。

对于更复杂的字符串有一定的格式,并且其中它是保留整个字符串的结构和用于将输入提供的占位符,使用String.Format有用的。

和是的,有一个开销。 String.Format底层使用下一个StringBuilder。简单的字符串连接将是在这些情况下要快得多。一对夫妇的基准和关于这一主题的博客文章中可以很容易地找到。当然,这一切都取决于你的使用。如果小串concats在一个循环中发生那么String.Format的反复使用可能会比一个简单的+ CONCAT更明显。如果你正在建设一个串在一个循环中,则典型的例子就是喜欢StringBuilder和CONCAT与StringBuilder的相关问题,可以在SO可以找到。

修改要澄清,这个用途有限:String.Format("{0}{1}", a, b)因为没有太多格式。它只是a + b。不幸的是我遇到这样的例子在生产代码,一旦我看到的String.Format我希望看到的东西,需要进行结构性一定的方式,不是一个简单的CONCAT。

OTOH,考虑这个电话号码:"(" + area + ") " + number + " x" + extension - 有太多的事情,它不是很容易修改。在这种情况下的String.Format优选:String.Format("({0}) {1} x{2}", area, number, extension)。这仍然是一个简单的例子,但你的想法。

其他提示

我也倾向于使用在大多数操作的String.format其中需要两个或多个字符串/值,因为它产生比更容易开始并在中间停止与+的串读码进行组合。

要扩大

string value = string.Format("Hello {0}", user.username);

是更可读和可膨胀比

string value = "Hello" + user.username

例如,如果你想添加的最后登录日期为系统升级,你可以简单的代码扩展到以下

string value = string.Format("Hello {0}, you last logged in {1}", user.username, user.lastLogin);

简单级联是简单的事情更有效。使用String.Format()用于当事情变得更复杂,它使你的代码更容易阅读。

<击>我个人做同样的事情(只要我打电话不处理格式为我的功能)。

<击>

<强> Clarrification

有关规则的字符串连接等"Hello " + "World!";我会使用StringBuilder。你的榜样在前面加上两个选项卡...我认为更像格式格式化输出字符串。

有是格式和级联之间的区别...小心你用什么来这。


String.Format()使用一个StringBuilder内部所以拼接将是比反正定期做字符串连接更加有效。

您可能想改变你的例子,因为Console.WriteLine()可以处理的格式本身(无需String.Format()):

Console.WriteLine("\t\t{0}", myString);

<击>

我的规则是,如果我不得不使用+(串联)不止一次我其改变为更string.Format

string a = "Something: " + x;   // ok

string b = "Something: " + x + " something else"; // change it to a string.Format
string bB = string.Format("Something: {0} something else", x); // much nicer to read

string c = "Something: " + x + " " + y + " " + z;  // Yuck
string cC = string.Format("Something: {0} {1} {2}", x, y, x);  // Much nicer

我不知道性能,有人可能会提供的数据,但我的感觉是的String.Format是去,如果你想要把格式字符串在你的配置文件(或数据库字段或资源文件的方式管他呢)。这样,如果你要调整标签的数量,切换到空间,加上分隔符,或什么的,你不必重新编译。

我倾向于使用String.Concat代替String.Format时我只需要前缀或后缀给定的字符串。我喜欢显式调用到Concatmethod然后使用+运营商,如果你已经使用String.Format它只是一个开关一次击键问题。

IIRC,所述String.Concat方法将是与使用操作者所以它也比String.Format更快。

我几乎总是使用的格式,虽然我使用的扩展方法而不是静态字符串的方法。我觉得更容易理解,更容易改变,而且通常更易于维护。它也可以让定位更加容易,因为它不引入排序问题的级联方式一样。

真的,这看起来更好?

"You have {0} widgets.".Frmt(widgetCount)
"You have " + widgetCount.ToString() + " widgets."
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top