1

可能重复:
C# 字符串输出:格式还是连续?

Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);

Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" );

我想知道这些方式有什么不同,哪个更好?

4

7 回答 7

3

为了:

Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);

您的第一个电话解决为:Console.WriteLine(string,object,object)

在伊利诺伊州

 IL_000d:  ldstr      "Hi there, {0} {1}!"
 IL_0012:  ldloc.0
 IL_0013:  ldloc.1
 IL_0014:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object,
                                                                object)

为了:

Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" );

而您的第二条语句调用string.Concat方法。

IL_0042:  call       string [mscorlib]System.String::Concat(string[])
IL_0047:  call       void [mscorlib]System.Console::WriteLine(string)

如果您使用ILSpy查看代码,您将看到+用于字符串连接的部分已替换为对string.Concat方法的调用

string userName = "Test";
string userSurname = "Test2";
Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);
Console.WriteLine(string.Concat(new string[]
{
    "Hi there, ",
    userName,
    " ",
    userSurname,
    "!"
}));

关于性能差异,我相信如果有任何差异可以忽略不计。

于 2012-09-19T07:18:16.007 回答
1

Both are same.

At runtime, first option is resolved to create complete string.

Still First is better as its a much cleaner way of judging what string will look like finally.

于 2012-09-19T06:33:00.663 回答
1

第一个涉及标准 .NET 格式,第二个是简单的字符串连接。

我更喜欢第一个,因为它使 display 与 data 分开,并且它允许我存储不同的格式字符串来进行本地化,例如。这是想法:

var EnglishFormat = "Hi there, {0} {1}!";
var FrenchFormat = "Salut tout le monde, {0} {1}!";
...

Console.WriteLine(currentLocaleFormat, userName, userSurname); 
于 2012-09-19T06:34:49.407 回答
1

一般的String.Format vs String concatenation主题已经在 StackOverflow 上讨论过很多次,请参考以下问题(只是开始):

于 2012-09-19T06:41:15.270 回答
0

There is no difference in the result.

The first one uses string formatting the second one concatenates the strings.

Try to avoid concatenations because it uses more memory

于 2012-09-19T06:33:12.870 回答
0

两个命令输出相同的结果没有区别。第一个更好,因为它避免了额外的空字符串连接。

于 2012-09-19T11:13:56.933 回答
0

这两个示例都将打印相同的结果。我发现在第一个示例中更容易看到结果应该是什么,如果应该显示的字符串很长,那么可能很难看到它的样子。

当我应该向用户打印一些东西时,我总是使用第一个示例。

于 2012-09-19T06:35:00.740 回答