1. ホーム
  2. c#

[解決済み] C#のマルチライン補間文字列リテラル

2023-02-13 04:30:51

質問

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での長い文字列の補間行 (おかげさまで リック に感謝します!)