SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【C#で知っておくべき新機能】最新バージョンを徹底解説!

絶え間ない進化を続けるC#──バージョン11を理解しよう! 参照の強化と文字列関連の新機能を紹介

【C#で知っておくべき新機能】最新バージョンを徹底解説! 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

文字列関連の新機能

 ここからは、文字列関連の機能強化について紹介します。

UTF-8文字列リテラル(UTF-8 string literals)

 C# 11では、文字列リテラルに接尾辞として「u8」を追加することで、文字列リテラルをUTF-8形式のバイト列として記述できるようになりました。

 C# 10までは、UTF-8形式のバイト列が必要なときに、以下のようにbyte型の配列として記述していました。C#の文字(char)や文字列(string)はUTF-16という16ビットの値を基本にしていますので、UTF-8を取り扱うにはSpan<byte>といったバイト列が必要で、生成時には面倒な変換作業が必要でした。

ReadOnlySpan<byte> bytes = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x58, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00 };

 C# 11では、これが文字列リテラルとして直接記述できることができるようになります。以下は、ReadOnlySpan<byte>型のbytesをUTF-8リテラル"Hello, World!"で初期化する例です。

リスト utf8_literal/Program.cs
ReadOnlySpan<byte> bytes = "Hello, World!"u8;

Console.WriteLine("{0}", bytes[12]);
// 実行結果:33

生の文字列リテラル(Raw string literals)

 C# 11では、3個以上の二重引用符("""~)を使って、一切エスケープされない生の文字列リテラルを記述できるようになりました。

 生の文字列リテラルにより、二重引用符(")やバックスラッシュ(\)、文字列補間のためのブレース({ })、改行などを含む文字列を、リテラルとしてそのまま記述できます。「"""」に囲まれた文字列は、次に「"""」が現れるまで見たままの文字列とできます。JSONなどをリテラルとして埋め込むときなどに役に立つでしょう。なお、「"""」は「3個以上」であればよいので、例えば4個の「""""」を使うことで「"""」をリテラルに含ませることができます。

 以下は、生の文字列リテラルの記述例です。単一の行として記述してもよいですし、複数行に分けて記述することもできます。

リスト raw_string/Program.cs
// 単一行
var single_line = """{ name: "Yamauchi" }""";
// 複数行
var multi_line = """
    " はそのまま " として使われる(二重引用符)。
    \ も \ として使われる(バックスラッシュ)。
    {} も特別な解釈はされない。
    改行もそのまま反映される。
    """;

Console.WriteLine(single_line);
// 実行結果:{ name: "Yamauchi" }
Console.WriteLine(multi_line);
// 実行結果:" はそのまま " として使われる(二重引用符)。
             \ も \ として使われる(バックスラッシュ)。
             {} も特別な解釈はされない。
             改行もそのまま反映される。

 「$"""」を使うことで、文字列補間を使うこともできます。この場合は、中かっこ({ })内に記述した式で文字列の内容が置き換えられます。

リスト raw_string_2/Program.cs
var first = "Yamauchi";
var last = "Nao";

// 単一行
var single_line = $"""first: "{first}", last: "{last}";""";
// 複数行
var multi_line = $"""
    first: "{first}",
    last: "{last}";
    """;

Console.WriteLine(single_line);
// 実行結果:first: "Yamauchi", last: "Nao";
Console.WriteLine(multi_line);
// 実行結果:first: "Yamauchi",
             last: "Nao";

文字列補間中の改行(Newlines in string interpolations)

 C# 11では、文字列補間の中で中かっこ({ })の中に改行を含められるようになりました。

 これにより、文字列補間の通常の書式($")にて中かっこ({ })の中を自由に改行できます。より複雑な式を文字列補間に埋め込みたいときに有用です。

リスト newline_strint/Program.cs
var x = 100;
var y = 200;
var s = $"x+y: {
    x + y
    }, x-y: { x - y }";

Console.WriteLine(s);
// 実行結果:x+y: 300, x-y: -100

 なお、C# 10まででも「$@」を使うことで、同様の記述が可能でした。

まとめ

 今回は、C# 11における新機能のうち、参照型や文字列関連の新機能を中心に紹介しました。次回は、switch文などで使えるパターンマッチングの拡充や、残りの新機能について紹介します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【C#で知っておくべき新機能】最新バージョンを徹底解説!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook <個人紹介> WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17486 2023/03/30 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング