C# 言語のバージョン管理

最新の C# コンパイラでは、プロジェクトのターゲット フレームワーク (1 つまたは複数) に基づいて既定の言語バージョンが決定されます。 Visual Studio には値を変更するための UI がありませんが、それは csproj ファイルを編集することで変更できます。 既定値を選択すれば、ターゲット フレームワークと互換性がある最新の言語バージョンが使用されます。 プロジェクトのターゲットと互換性がある最新の言語機能にアクセスできるという利点があります。 また、このように既定値を選択すると、ターゲット フレームワークで利用できない型や実行時動作を必要とする言語が使用されません。 既定値より新しい言語バージョンを選択すると、コンパイル時間や実行時エラーの診断が困難になることがあります。

C# 13 は、.NET 9 以降のバージョンでのみサポートされています。 C# 12 は、.NET 8 以降のバージョンでのみサポートされています。 C# 11 は、.NET 7 以降のバージョンでのみサポートされています。

Visual Studio のバージョンと.NET バージョンの対応表が必要な場合、Visual Studio プラットフォーム互換性ページをご覧ください。 C# バージョンと Mono の互換性については、C# の Mono ページを参照してください。

既定値

コンパイラでは、以下の規則に基づいて既定値が決定されます。

移行先 Version C# 言語の既定のバージョン
.NET 9.x C# 13
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET Core 3.x C# 8.0
.NET Core 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework すべて C# 7.3

ご自分のプロジェクトが、対応するプレビュー言語バージョンを持つ preview フレームワークをターゲットにしている場合、使用される言語バージョンはプレビュー言語バージョンです。 環境を問わず、そのプレビューでは最新の機能が使用されます。リリース済みの .NET Core バージョンをターゲットにするプロジェクトに影響はありません。

C# 言語バージョン リファレンス

次の表では、現在のすべての C# 言語バージョンを示します。 古いコンパイラでは、すべての値が解釈されない場合があります。 最新の .NET SDK をインストールすると、一覧表示されているすべてにアクセスできます。

説明
preview コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。
latest コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。
latestMajor
または default
コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。
13.0 コンパイラが受け入れるのは C# 13 以下に含まれている構文だけです。
12.0 コンパイラは、C# 12 以下に含まれている構文のみを受け入れます。
11.0 コンパイラは、C# 11 以下に含まれている構文のみを受け入れます。
10.0 コンパイラは、C# 10 以下に含まれている構文のみを受け入れます。
9.0 コンパイラは、C# 9 以下に含まれている構文のみを受け入れます。
8.0 コンパイラは、C# 8.0 以下に含まれている構文のみを受け入れます。
7.3 コンパイラは、C# 7.3 以下に含まれている構文のみを受け入れます。
7.2 コンパイラは、C# 7.2 以下に含まれている構文のみを受け入れます。
7.1 コンパイラは、C# 7.1 以下に含まれている構文のみを受け入れます。
7 コンパイラは、C# 7.0 以下に含まれている構文のみを受け入れます。
6 コンパイラは、C# 6.0 以下に含まれている構文のみを受け入れます。
5 コンパイラは、C# 5.0 以下に含まれている構文のみを受け入れます。
4 コンパイラは、C# 4.0 以下に含まれている構文のみを受け入れます。
3 コンパイラは、C# 3.0 以下に含まれている構文のみを受け入れます。
ISO-2
または 2
コンパイラは、ISO/IEC 23270:2006 C# (2.0) に含まれている構文のみを受け入れます。
ISO-1
または 1
コンパイラは、ISO/IEC 23270:2003 C# (1.0/1.2) に含まれている構文のみを受け入れます。

Note

default 値を使用して LangVersion を指定することは、LangVersion オプションを省略することとは異なります。 default 指定では、ターゲット フレームワークを考慮せずに、コンパイラがサポートする最新バージョンの言語が使用されます。 たとえば、現在のバージョンの Visual Studio 2022 から .NET 6 をターゲットとするプロジェクトをビルドすると、LangVersion が指定されていない場合は C# 10 が使用されますが、LangVersiondefault に設定されている場合は C# 12 が使用されます。