Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);
Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" );
我想知道这些方法之间有什么不同,哪种更好?
答案 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)
答案 5 :(得分:0)
两个例子都会打印出相同的结果。 我发现在第一个例子中看到结果应该更容易,如果应该显示的字符串很长,那么很难看出它会是什么样子。
当我应该向用户打印时,我总是使用第一个例子。
答案 6 :(得分:0)
两个命令之间没有区别,两个命令都输出相同的结果。第一个更好,因为它避免了额外的空字符串连接。