这些与writeline()中的方法有什么不同?

时间:2012-09-19 06:28:51

标签: c# .net console

  

可能重复:
  C# String output: format or concat?

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

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

我想知道这些方法之间有什么不同,哪种更好?

7 个答案:

答案 0 :(得分:3)

:用于:

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

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

IN IL

 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,
    "!"
}));

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

答案 1 :(得分:1)

两者都是一样的。

在运行时,第一个选项被解析为创建完整的字符串。

Still First更好,因为它是一种更清晰的判断最终字符串的方式。

答案 2 :(得分:1)

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

我更喜欢第一个,因为它会将显示与数据分开,并且它允许我存储不同的格式字符串以进行本地化,例如。这是一个想法:

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

Console.WriteLine(currentLocaleFormat, userName, userSurname); 

答案 3 :(得分:1)

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

答案 4 :(得分:0)

结果没有区别。

第一个使用字符串格式,第二个连接字符串。

尝试avoid连接,因为它使用更多内存

答案 5 :(得分:0)

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

当我应该向用户打印时,我总是使用第一个例子。

答案 6 :(得分:0)

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