[C#11.0]生文字列リテラル

3つ以上のダブルクォートで囲むものを生文字列リテラルとする

@"" と $"" が合体したような機能ですかねぇ

Console.WriteLine("""生文字列リテラル""");
Console.WriteLine(""""これも生文字列リテラル"""");

\によるエスケープシーケンスは無効

Console.WriteLine("abc\ndef");
Console.WriteLine("""abc\ndef""");

実行結果

abc
def
abc\ndef

これは逐次的文字列リテラル(@"")と同じです

変数埋め込み

C#6.0から変数が埋め込めるようになりました
それのバージョンアップ版ですね

var x = 10;

// 生文字列リテラル
Console.WriteLine($"""x = {x}""");
Console.WriteLine($$"""x = {{x}}""");

// 変数埋め込み(C#6.0)
Console.WriteLine($"x = {x}");

開始のダブルクォートの前に$を何個記載するかに応じて{}の数が決まるようになっています

なかなか使う機会はないかもしれないですが・・・
以下のようなことができます

var x = 10;

// 生文字列リテラル
Console.WriteLine($$"""{x} = {{x}}"""); // {x} = 10

// 変数埋め込み(C#6.0)で同じことをするなら
Console.WriteLine($"{{x}} = {x}");      // {x} = 10

変数埋め込みだと { }が特別な文字なのでエスケープするためには、同じ文字で続けて書く必要がありました
生文字列リテラルの場合は、ダブルクォートの前の$の数で調整できるので、 {} をリテラルとして使いたい場合は、
$の数を調整すればよいので、直感的に記載ができるということになります

開始直後、終了直前の改行は無視。各行の前後空白は無視。

var str = """"
    abc
    def
    ghi
    """";

Console.WriteLine($"文字数:{str.Length}");
Console.WriteLine(str);
文字数:13
abc
def
ghi

13文字なので、各文字列の間にCRLFの2文字("abc\r\ndef\r\nghi")があるので
3文字(abc) + 2文字(\r\n) + 3文字(def) + 2文字(\r\n) + 3文字(ghi) 計13文字になります

投稿日時: 2025-05-17 16:20:17
更新日時: 2025-06-13 13:31:13

内部リンク

Comment

最近の投稿

最近のコメント

タグ

アーカイブ

その他