C#7.1 新增功能

  • 2019 年 10 月 4 日
  • 筆記

C# 7.1 是 C# 語言的第一個點版本(更新版本)。 它標誌著該語言發布節奏的加速。 理想情況下,可以在每個新功能準備就緒時更快推出新功能。 C# 7.1 增加了將編譯器配置為匹配特定語言版本的功能。 從而可以分別制定有關升級語言版本的決策和有關升級工具的決策。

C# 7.1 增加了語言版本選擇配置元素、三個新的語言功能和新的編譯器行為。

最後,編譯器有 -refout-refonly 兩個選項,可用於控制引用程式集生成

若要使用單點版本中的最新功能,需要配置編譯器語言版本並選擇版本。

01 非同步 main 方法

非同步 Main 方法使你能夠在 Main 方法中使用 await 關鍵字。 在過去,需要編寫:

static int Main()  {      return DoAsyncWork().GetAwaiter().GetResult();  }

現在,可以編寫:

static async Task<int> Main()  {      // DoAsyncWork,包括其等待表達式:      return await DoAsyncWork();  }

如果程式不返回退出程式碼,可以聲明返回 TaskMain 方法:

static async Task Main()  {      await SomeAsyncMethod();  }

如需了解更多詳情,可以閱讀編程指南中的非同步 Main 一文。

02 默認文本表達式

默認文本表達式是針對默認值表達式的一項增強功能。 這些表達式將變數初始化為默認值。 過去會這麼編寫:

Func<string, bool> whereClause = default(Func<string, bool>);

現在,可以省略掉初始化右側的類型:

Func<string, bool> whereClause = default;

若要詳細了解此增強功能,可以參閱 C# 編程指南中的默認值表達式一文。

此增強功能也會更改某些default 關鍵字 的分析規則。

03 推斷元組元素名稱

此功能是對 C# 7.0 中引入的元組功能一次小型增強。 在初始化元組時,許多時候,賦值操作右側的變數名與用於元組元素的名稱相同:

int count = 5;  string label = "Colors used in the map";  var pair = (count: count, label: label);

元組元素的名稱可通過在 C# 7.1 中初始化元組時使用的變數進行推斷:

int count = 5;  string label = "Colors used in the map";  var pair = (count, label); // element names are "count" and "label"

若要詳細了解此功能,可以參閱元組一文。

04 泛型類型參數的模式匹配

自 C# 7.1 起,isswitch 類型模式的模式表達式的類型可能為泛型類型參數。 這可能在檢查 structclass 類型且要避免裝箱時最有用。

05 引用程式集生成

有兩個新編譯器選項可生成僅引用程式集:-refout-refonly 。 鏈接的文章詳細介紹了這些選項和引用程式集。