C# 13 の新機能

C# 13 には、次の新機能が含まれます。 これらの機能は、最新の Visual Studio 2022 バージョンまたは .NET 9 プレビュー SDK を使用して試すことができます。

C# 13 は .NET 9 でサポートされています。 詳細については、「C# 言語のバージョン管理」を参照してください。

最新の .NET 9 プレビュー SDK は、.NET のダウンロード ページからダウンロードすることができます。 .NET 9 プレビュー SDK を含む Visual Studio 2022 - プレビューをダウンロードすることもできます。

新機能は、パブリック プレビュー リリース内でそれらを使用することができる場合に、"C# の新機能" ページに追加されます。 roslyn Feature Status ページWorking Set セクションには、今後の機能がメイン ブランチの中にマージされた場合に記録されます。

Note

これらの機能に関するご意見とご感想をお寄せください。 これらの新機能のいずれかに問題がある場合は、dotnet/roslyn リポジトリに新しい問題を作成します。

新しいエスケープ シーケンス

\e を、ESCAPE 文字 (Unicode U+001B) の文字リテラル エスケープ シーケンスとして使用することができます。 以前は、\u001b または \x1b が使用されていました。 1b の後に続く次の文字が有効な 16 進数であった場合、それらの文字はエスケープ シーケンスの一部となってしまうため、\x1b の使用は推奨されませんでした。

メソッド グループでの自然型

この機能により、メソッド グループを含むオーバーロードの解決に対して小規模な最適化が行われます。 以前の動作では、コンパイラはメソッド グループの候補メソッドのすべてのセットに対してコンストラクトを実行していました。 自然型が必要な場合、その自然型は候補メソッドのすべてのセットに基づいて決定されていました。

新しい動作では、各スコープで候補メソッドのセットを取り除きます (該当しない候補メソッドを削除します)。 通常、これらは誤ったアリティ (引数の個数) を持つジェネリック メソッド、または条件が満たされていない制約です。 このプロセスは、候補メソッドが見つからない場合にのみ、次の外部スコープに進みます。 このプロセスは、オーバーロード解決の一般的なアルゴリズムにより厳密に従います。 指定されたスコープで見つかったすべての候補メソッドが一致しない場合、そのメソッド グループには自然型がありません。

これらの変更の詳細については提案仕様を読んでください。

暗黙的なインデックス アクセス

暗黙的な "末尾からの" インデックス演算子 ^ が、オブジェクト初期化子式で許可されるようになりました。 たとえば、次のコードの中に示すように、オブジェクト初期化子の中で配列を初期化することができるようになりました。

var v = new S()
{
    buffer =
    {
        [^1] = 0,
        [^2] = 1,
        [^3] = 2,
        [^4] = 3,
        [^5] = 4,
        [^6] = 5,
        [^7] = 6,
        [^8] = 7,
        [^9] = 8,
        [^10] = 9
    }
};

C# 13 より前のバージョンでは、オブジェクト初期化子の中で ^ 演算子を使用することはできません。 要素のインデックスは先頭から作成する必要があります。

関連項目