web-dev-qa-db-ja.com

複数行のC#補間文字列リテラル

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();

それとももっとエレガントなものがありますか?

47
Drew Noakes

$および@を組み合わせて、複数行の補間文字列リテラルを取得します。

string s =
$@"Height: {height}
Width: {width}
Background: {background}";

ソース: C#6の長い文字列の補間行 (スレッドを見つけてくれて @ Ric に感謝!)

98

おそらく組み合わせを使用します

var builder = new StringBuilder()
    .AppendLine($"Width: {width}")
    .AppendLine($"Height: {height}")
    .AppendLine($"Background: {background}");
5
sara

個人的には、文字列連結を使用して別の補間文字列を追加するだけです

例えば

var multi  = $"Height     : {height}{Environment.NewLine}" +
             $"Width      : {width}{Environment.NewLine}" +
             $"Background : {background}";

フォーマットと読み取りが簡単だと思います。

このwillは、$ @ ""を使用する場合と比べて追加のオーバーヘッドがありますが、これは最もパフォーマンスが重要なアプリケーションでのみ顕著です。メモリ内の文字列操作は、データI/Oと比較して非常に安価です。データベースから単一の変数を読み取るには、ほとんどの場合、数百倍の時間がかかります。

0
Andrew Monteith