使用的String.format为简单的事情?
-
21-09-2019 - |
题
在我的早期.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
时我只需要前缀或后缀给定的字符串。我喜欢显式调用到Concat
method然后使用+
运营商,如果你已经使用String.Format
它只是一个开关一次击键问题。
IIRC,所述String.Concat
方法将是与使用操作者所以它也比String.Format
更快。
我几乎总是使用的格式,虽然我使用的扩展方法而不是静态字符串的方法。我觉得更容易理解,更容易改变,而且通常更易于维护。它也可以让定位更加容易,因为它不引入排序问题的级联方式一样。
真的,这看起来更好?
"You have {0} widgets.".Frmt(widgetCount)
"You have " + widgetCount.ToString() + " widgets."