C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com
今回は 「 文字列補間式の改行 」。公式 Learn の記事は次です。
記事中の「 C# 11 以降では、補間される式に改行を含めることができます。 」から始まる部分が今回の新機能です。
文字列補間式の中で改行ができます。また、文字列補間式は C# 11 の新機能「生文字リテラル ( C# 11 での新機能の説明では「未加工の文字リテラル」)」と同時に使用することもできます。
■ 確認
次のようなコードが書けます。
var prefectures = new[] { "埼玉", "東京" }; foreach (var prefecture in prefectures) Console.WriteLine( $"{prefecture} は { prefecture switch { "埼玉" => "最高", _ => "もっとがんばりましょう" } } です。" ); // 埼玉 は 最高 です。 // 東京 は もっとがんばりましょう です。
以前は次のように書いていたので、かなり良いと思います。
var prefectures = new[] { "埼玉", "東京" }; foreach (var prefecture in prefectures) Console.WriteLine( $"{prefecture} は {prefecture switch { "埼玉" => "最高", _ => "もっとがんばりましょう" }}です。" );
ちなみに前者のコードは .NET 6 を指定した場合は次のエラーになります。
エラー CS8967 非逐語的な補間された文字列内の改行は、C# 10.0 ではサポートされていません。11.0 またはそれ以上の言語バージョンを使用してください。
■ 生文字リテラルとの組み合わせ
生文字リテラルとの組み合わせはこんな感じになります。
var prefectures = new[] { "埼玉", "東京" }; foreach (var prefecture in prefectures) Console.WriteLine( $$""" "{ {{prefecture}} } は { {{ prefecture switch { "埼玉" => "最高", _ => "もっとがんばりましょう" } }} } です。 """ ); // { 埼玉 } は { 最高 } です。 // { 東京 } は { もっとがんばりましょう } です。
{ や } を含む文字列が作りやすくなります。
ちなみにこのコードを .NET 6 指定では次のエラーです。
エラー CS8967 非逐語的な補間された文字列内の改行は、C# 10.0 ではサポートされていません。11.0 またはそれ以上の言語バージョンを使用してください。 エラー CS8936 機能 '生文字列リテラル' は C# 10.0 では使用できません。言語バージョン 11.0 以上を使用してください。
もし {{ や }} を文字列内で使いたい場合も大丈夫です。 $
を増やせば大丈夫です。
var prefectures = new[] { "埼玉", "東京" }; foreach (var prefecture in prefectures) Console.WriteLine( $$$""" "{{ {{{prefecture}}} }} は {{ {{{ prefecture switch { "埼玉" => "最高", _ => "もっとがんばりましょう" } }}} }} です。 """ ); // {{ 埼玉 }} は {{ 最高 }} です。 // {{ 東京 }} は {{ もっとがんばりましょう }} です。
さらに増やしたい場合は、さらに $
を追加です。
var prefectures = new[] { "埼玉", "東京" }; foreach (var prefecture in prefectures) Console.WriteLine( $$$$""" "{{{ {{{{prefecture}}}} }}} は {{{ {{{{ prefecture switch { "埼玉" => "最高", _ => "もっとがんばりましょう" } }}}} }}} です。 """ ); // {{{ 埼玉 }}} は {{{ 最高 }}} です。 // {{{ 東京 }}} は {{{ もっとがんばりましょう }}} です。
こういう力強い言語仕様、大好きです!
■ 必要な時、自然に書くと思います
この新機能は覚えておかなくても、必要な場面では自然に書いているとおもいます。大丈夫です。安心してください。