C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com
今回は 「 未加工の文字リテラル 」。公式 Learn の記事は次です。
機能を表す言葉が 未加工の文字リテラル で機能名が 生文字列リテラル のようです。両方の言葉を覚えておきましょう。
改行やエスケープが必要な文字列をそのまま書けます。
■ 確認
次のようなコードが書けます。
var ramen = """ "手打ち風" ラーメン \550- """; Console.WriteLine(ramen); // "手作り風" ラーメン // \550-
以前は次のように書いていたので、かなり良いと思います。
var ramen = @"""手打ち風"" ラーメン \\550- "; Console.WriteLine(ramen);
ちなみに前者のコードは .NET 6 を指定した場合は次のエラーになります。
エラー CS8936 機能 '生文字列リテラル' は C# 10.0 では使用できません。言語バージョン 11.0 以上を使用してください。
■ """
"""
の行で初めて """
の行で終わると今回の 生文字列リテラル が使えます。
しかし、"""
が使いたいときはどうでしょう? 開始と終了の行の "
を増やせば行けます。
var ramen = """" """手打ち風""" ラーメン \550- """"; Console.WriteLine(ramen); // """手作り風""" ラーメン // \550-
""""
が使いたい場合はさらに増やします。
var ramen = """"" """"手打ち風"""" ラーメン \550- """""; Console.WriteLine(ramen); // """"手作り風"""" ラーメン // \550-
■ その他の細かいルール
""""
は開始と終了に 1 行使って入力します。次のコードはエラーになってしまいます。
var ramenA = """手打ち風 ラーメン \550- """; var ramenB = """ 手打ち風 ラーメン \550-""";
終了の """"
が文字列の行ごとの開始位置になります。次の例では終了の """"
が行の先頭にあって、文字列は左に空白があります。そのため文字列としてはスペースで始まる文字列になっています。
var ramen = """ 手打ち風 ラーメン \550- """; Console.WriteLine(ramen); // """"手作り風"""" ラーメン // \550-
終了の """"
より先頭の空白が少ない行がある場合はエラーになります。
var ramen = """ 手打ち風 ラーメン \550- """;
エラー CS8999 行の先頭が生文字列リテラルの終了行と同じ空白ではありません。
■ 必要な時、自然に書くと思います
この新機能はかなり使いやすいです。覚えておきましょう。細かいことは特に覚えておかなくても普通に書けると思います。大丈夫です。安心してください。