C#6は、構文で補間された文字列リテラルのコンパイラサポートを提供します。
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
これは短い文字列には適していますが、長い文字列を作成する場合は、1行で指定する必要がありますか?
他の種類の文字列を使用すると、次のことができます。
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
または:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
私はそれをすべて1行にすることなく、文字列補間でこれを達成する方法を見つけることができません:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
この場合、\r\n
代わりに Environment.NewLine
(移植性が低い)、またはローカルに引き出しますが、セマンティックの強度を失わずに1行未満に減らすことができない場合があります。
文字列補間を長い文字列に使用すべきではないという単純なケースですか?
長い文字列にStringBuilder
を使用して文字列を作成するだけですか?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
それとももっとエレガントなものがありますか?
$
および@
を組み合わせて、複数行の補間文字列リテラルを取得します。
string s =
$@"Height: {height}
Width: {width}
Background: {background}";
ソース: C#6の長い文字列の補間行 (スレッドを見つけてくれて @ Ric に感謝!)
おそらく組み合わせを使用します
var builder = new StringBuilder()
.AppendLine($"Width: {width}")
.AppendLine($"Height: {height}")
.AppendLine($"Background: {background}");
個人的には、文字列連結を使用して別の補間文字列を追加するだけです
例えば
var multi = $"Height : {height}{Environment.NewLine}" +
$"Width : {width}{Environment.NewLine}" +
$"Background : {background}";
フォーマットと読み取りが簡単だと思います。
このwillは、$ @ ""を使用する場合と比べて追加のオーバーヘッドがありますが、これは最もパフォーマンスが重要なアプリケーションでのみ顕著です。メモリ内の文字列操作は、データI/Oと比較して非常に安価です。データベースから単一の変数を読み取るには、ほとんどの場合、数百倍の時間がかかります。