C# 語言版本控制

最新 C# 編譯器會根據您專案的目標 Framework 判斷預設語言版本。 Visual Studio 不提供使用者介面以變更值,但您可編輯 csproj 檔案進行變更。 預設選項可確保您使用與目標框架相容的最新語言版本。 您可存取與專案目標相容的最新語言功能,而獲得相關效益。 此預設選項也可確保,您所使用的語言不會需要目標架構中無法使用的類型或執行階段行為。 若選擇的語言版本比預設值更新,可能會導致難以診斷編譯時間和執行階段錯誤。

C# 12 僅支援 .NET 8 以上版本。 C# 11 僅支援 .NET 7 以上版本。 C# 10 僅支援 .NET 6 以上版本。

如需 Visual Studio 版本所支援 .NET 版本的詳細資料,請參閱 Visual Studio 平台相容性頁面。 請參閱 Visual Studio for Mac 平台相容性頁面,以取得 Visual Studio for Mac 版本所支援 .NET 版本的詳細資料。 請參閱 適用於 C# 的 Mono 頁面,以了解 C# 版本的 Mono 相容性。

Defaults

編譯器會根據下列規則決定預設值:

Target 版本 C# 語言版本預設值
.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 版本的專案。

重要

Visual Studio 2017 的新專案範本已在新專案檔中新增 <LangVersion>latest</LangVersion> 項目。 如果您升級這些專案的目標 Framework,<LangVersion> 設定可以覆寫新目標 Framework 的預設值。 請務必從專案檔中移除 <LangVersion>latest</LangVersion>,以確保您的專案使用目標 Framework 的建議編譯器版本。 您可以更新目標 Framework 以存取較新的語言功能。

覆寫預設值

如果您必須明確指定您的 C# 版本,您可以透過數種方式進行:

提示

您可在專案屬性頁面中查看 Visual Studio 中的語言版本。 在 [建置] 索引標籤下,[進階] 窗格會顯示選取的版本。

若要知道目前使用的語言版本,請在程式碼中放置 #error version (區分大小寫)。 如此會讓編譯器回報編譯器錯誤 CS8304,其中包含所使用的編譯器版本,以及目前選取的語言版本。 如需詳細資訊,請參閱 #error (C# 參考)

編輯專案檔

您可以在專案檔中設定語言版本。 例如,如果您明確希望存取預覽功能,您可以新增如下元素:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

preview 值會使用編譯器支援的最新預覽 C# 語言語言。

設定多個專案

若要設定多個專案,您可建立包含 <LangVersion> 元素的 Directory.Build.props 檔案 (通常在您的解決方案目錄中)。 將下列設定新增至 Directory.Build.props 檔案:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

在包含該檔案的目錄中,所有子目錄的組建現在皆會使用預覽 C# 版本。 如需詳細資訊,請參閱自訂組建

C# 語言版本參考

下表顯示所有目前的 C# 語言版本。 較舊的編譯器可能無法了解每個值。 若安裝最新的 .NET SDK,則可存取列出的所有項目。

意義
preview 編譯器會接受最新預覽版本的所有有效語言語法。
latest 編譯器會接受編譯器最新已發行版本 (包括次要版本) 的語法。
latestMajor
default
編譯器會接受編譯器最新已發行主要版本的語法。
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) 中所含的語法。

注意

使用 default 值指定LangVersion 與省略 LangVersion 選項不同。 指定 default 會使用編譯器支援的最新語言版本,而不考慮目標 Framework。 例如,如果未指定 LangVersion,則從目前 Visual Studio 2022 版本建置以 .NET 6 為目標的專案會使用 C# 10,但如果 LangVersion 設定為 default,則會使用 C# 12。