クールな機能。一部の人に明らかでない場合、これがstring.formatよりも優れている理由を強調したいだけです。
パラメータを照合するために、string.formatを「{0} {1} {2}」に変更するように言っている人を読みました。string.formatで「{0} {1} {2}」を注文する必要はありません。「{2} {0} {1}」を使用することもできます。ただし、20などの多くのパラメーターがある場合は、文字列を「{0} {1} {2} ... {19}」にシーケンスする必要があります。それが混乱した混乱であるならば、あなたはあなたのパラメーターを整列させるのに苦労するでしょう。
$を使用すると、パラメーターをカウントせずにパラメーターをインラインで追加できます。これにより、コードの読み取りと保守がはるかに容易になります。
$の欠点は、文字列内のパラメータを簡単に繰り返すことができないため、入力する必要があることです。たとえば、System.Environment.NewLineを入力するのが面倒な場合は、string.format( "... {0} ... {0} ... {0}"、System.Environment.NewLine)、しかし、$では、繰り返す必要があります。$ "{0}"は "0"を返すため、$ "{0}"を実行してstring.formatに渡すことはできません。
余談ですが、別の複製されたtpoicでコメントを読みました。コメントできなかったので、こちらです。彼は言った
string msg = n + " sheep, " + m + " chickens";
複数の文字列オブジェクトを作成します。これは実際には当てはまりません。これを1行で行うと、1つの文字列のみが作成され、文字列キャッシュに配置されます。
1) string + string + string + string;
2) string.format()
3) stringBuilder.ToString()
4) $""
これらはすべて文字列を返し、キャッシュに1つの値のみを作成します。
一方:
string+= string2;
string+= string2;
string+= string2;
string+= string2;
「;」が4つあるため、キャッシュに4つの異なる値を作成します。
したがって、次のようなコードを書く方が簡単ですが、CarlosMuñozが修正したように、5つの補間された文字列を作成します。
string msg = $"Hello this is {myName}, " +
$"My phone number {myPhone}, " +
$"My email {myEmail}, " +
$"My address {myAddress}, and " +
$"My preference {myPreference}.";
これにより、コードを非常に読みやすくしながら、キャッシュに単一の文字列が作成されます。パフォーマンスについてはわかりませんが、MSがまだ最適化していない場合は最適化するでしょう。