重複の可能性:
C#文字列出力:フォーマットまたは連結?
Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);
Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" );
これらの方法と方法の違いと、どちらが優れているかを知りたいですか?
重複の可能性:
C#文字列出力:フォーマットまたは連結?
Console.WriteLine("Hi there, {0} {1}!", userName, userSurname);
Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" );
これらの方法と方法の違いと、どちらが優れているかを知りたいですか?
にとって:
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
2番目のステートメントがメソッドを呼び出している間。
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,
"!"
}));
性能の違いについては、ごくわずかなものがあればと思います。
どちらも同じです。
実行時に、最初のオプションが解決され、完全な文字列が作成されます。
ストリングが最終的にどのように見えるかを判断するためのはるかにクリーンな方法として、StillFirstの方が優れています。
1つ目は標準の.NETフォーマットを含み、2つ目は単純な文字列連結です。
私は最初のものを好みます。なぜなら、それは表示をデータから分離し続け、例えば、ローカリゼーションを行うために異なるフォーマット文字列を保存することを可能にするからです。ここにアイデアがあります:
var EnglishFormat = "Hi there, {0} {1}!";
var FrenchFormat = "Salut tout le monde, {0} {1}!";
...
Console.WriteLine(currentLocaleFormat, userName, userSurname);
一般的なString.FormatとStringの連結の主題は、StackOverflowで何度も議論されています。以下の質問を参照してください(最初に)。
どちらの例でも同じ結果が出力されます。最初の例では、結果がどうなるかを確認する方がはるかに簡単であることがわかりました。表示する文字列が長い場合、どのように表示されるかを確認するのは難しいかもしれません。
ユーザーに何かを印刷する必要がある場合は、常に最初の例を使用しています。
2つのコマンドに違いはなく、どちらも同じ結果を出力します。最初のコマンドは、余分な空の文字列の連結を回避するため、より優れています。