プログラミングとソフトウェア開発

C# 15、拡張インデックスとコレクション式の改善を追加へ:プレビュー版

Microsoftは.NETブログで、.NET 11とともに登場するC# 15の最初のプレビューで利用できる一連の機能を紹介した。コレクションのコンストラクターへの引数の受け渡し、拡張インデックス、反復ループのラベルなどが含まれる。今回の変更は、中間コードを減らし、日常的なプログラミングにおける一部のパターンの明瞭性を高めることを目的としている。

2026-08-24
1 分で読めます
191 閲覧数
certi.news Editorial Team
C# 15、拡張インデックスとコレクション式の改善を追加へ:プレビュー版

Microsoftは、.NET 11とともに登場するバージョンであるC# 15のプレビューで利用できる新機能を発表した。今回の更新には、共用体型、閉じた階層、アンセーフコードを扱う更新モデルのプレビューに加え、日常的な利用で繰り返される手続き的なコードを減らすことを目的とした小規模な変更が含まれる。

コレクション式内の引数

C#のコレクション式は、値を複数のコレクション型に変換できるが、これまでは基本コンストラクターや作成メソッドに引数を渡すことができなかった。C# 15では、式の先頭に置いてこれらの引数を渡すための、with(...)という新しい要素が追加される。

これにより、例えば式の中で容量を直接指定してリストを作成したり、StringComparer.OrdinalIgnoreCaseを渡してHashSetを作成したりできるようになる。作成と要素の追加を分ける必要はない。Microsoftは、この機能が、キーに使用する比較器を指定する必要が生じる可能性が高い、将来予定されている辞書式の構築への道を開くものだと説明している。

拡張インデックスによる要素へのアクセス

C# 14では、メソッドに加えてプロパティや演算子にも拡張メンバーが追加された。C# 15ではこのモデルが拡張インデックスにも広げられる。これにより、受け取ったオブジェクトの要素に、そのインデックスが型内に元から定義されているかのようにアクセスできる。

Microsoftが示す例では、IEnumerable<int>の要素にアクセスするために、ElementAtIndexのようなヘルパーメソッドが必要だった。新しい構文では、受け取ったオブジェクトに関連付けられた拡張インデックスを通じて、numbers[2]と記述できる。ブログでは、インデックスを静的にすることはできないため、拡張コンテナーには名前付きの受け取り対象を含める必要があると説明されている。

breakとcontinueのループラベル

C# 15では、反復ループに名前を付け、そのループに直接breakまたはcontinueを向けられるようになる。これは入れ子になったループで役立つ。これまでは、外側のループを抜けるために、通常はブール変数を使うか、gotoを使用するか、ロジックを別のメソッドに移す必要があった。

実際には、ラベルによってコード内で終了対象が明確になり、目的の要素が見つかったかどうかを追跡する変数が不要になる。例ではscanという名前のループを示し、break scanを使ってそこから直接抜けられるようにしている。

開発者にとって何が変わるのか

これらの機能は、.NETの実行モデルを変更するというより、コードの構文を整理し、繰り返される定型処理の一部を減らすものだ。特に、コレクション式を使用するプロジェクト、入れ子になったループを扱うプロジェクト、拡張可能な型に対してより簡潔なアクセスインターフェースを必要とするプロジェクトで、その価値が際立つ。

ただし、これらの機能は依然としてプレビュー段階にあり、まだ最終的な安定版インターフェースではない。Microsoftは開発者に対し、.NET 11をダウンロードして各自のアプリケーションでC# 15を試し、新機能の完全なリファレンスを確認するとともに、csharplangプロジェクトで進行中の議論に参加するよう呼びかけている。この資料では、これらの機能が安定版に移行する最終的な時期は示されていない。

ニュースの出典
c
著者

certi.news Editorial Team

知っておくべきこと

Microsoftは、.NET 11で提供される予定のC# 15における新しいプレビュー機能を紹介しています。これには、コレクション式内の引数、拡張インデックス、ループラベルが含まれます。これらの機能はまだ最終確定しておらず、安定版のリリース時期は情報源で示されていません。

  • C# 15では、コレクション式内のコレクションコンストラクターに引数を渡すためのwith(...)構文が追加されます。
  • 拡張インデックスを使用すると、numbers[2]のようなネイティブインデックスに似た構文で、一部のオブジェクトの要素にアクセスできます。
  • ループラベルを使うと、breakまたはcontinueの対象を特定のループに直接指定できるため、ネストしたループで役立ちます。
  • プレビューには、共用体型、閉じた階層、アンセーフコードを扱うための更新モデルのプレビューも含まれます。
  • Microsoftは、開発者に.NET 11でこれらの機能を試し、csharplangプロジェクトの議論に参加するよう促しています。

よくある質問

C# 15の機能はいつ利用可能になりますか?

.NET 11で提供される予定ですが、現在はプレビュー段階であり、安定版の具体的なリリース時期は情報源で示されていません。

コレクション式のwith(...)引数にはどのような利点がありますか?

式の中でコレクションのコンストラクターまたは生成関数に直接引数を渡せます。たとえば、リストの容量を指定したり、HashSetにStringComparerを渡したりできます。

拡張インデックスでは何ができるようになりますか?

コンテナーの拡張に名前付きレシーバーが存在することを条件に、対象オブジェクトの要素へ、その型にインデックスが定義されているかのようにアクセスできます。

ループラベルはどのように役立ちますか?

名前付きループに対してbreakまたはcontinueを直接指定できるため、ネストしたループで論理フラグやgotoを使う必要性を減らせます。

このストーリーを探る

関連トピックとエンティティ

同じカテゴリー

おすすめ記事

すべてのニュースを見る