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.Concat2番目のステートメントがメソッドを呼び出している間。

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

どちらも同じです。

実行時に、最初のオプションが解決され、完全な文字列が作成されます。

ストリングが最終的にどのように見えるかを判断するためのはるかにクリーンな方法として、StillFirstの方が優れています。

于 2012-09-19T06:33:00.663 に答える
1

1つ目は標準の.NETフォーマットを含み、2つ目は単純な文字列連結です。

私は最初のものを好みます。なぜなら、それは表示をデータから分離し続け、例えば、ローカリゼーションを行うために異なるフォーマット文字列を保存することを可能にするからです。ここにアイデアがあります:

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とStringの連結の主題は、StackOverflowで何度も議論されています。以下の質問を参照してください(最初に)。

于 2012-09-19T06:41:15.270 に答える
0

結果に違いはありません。

1つ目は文字列フォーマットを使用し、2つ目は文字列を連結します。

より多くのメモリを使用するため、連結は避けてください

于 2012-09-19T06:33:12.870 に答える
0

どちらの例でも同じ結果が出力されます。最初の例では、結果がどうなるかを確認する方がはるかに簡単であることがわかりました。表示する文字列が長い場合、どのように表示されるかを確認するのは難しいかもしれません。

ユーザーに何かを印刷する必要がある場合は、常に最初の例を使用しています。

于 2012-09-19T06:35:00.740 に答える
0

2つのコマンドに違いはなく、どちらも同じ結果を出力します。最初のコマンドは、余分な空の文字列の連結を回避するため、より優れています。

于 2012-09-19T11:13:56.933 に答える