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(); }
如果程式不返回退出程式碼,可以聲明返回 Task 的 Main
方法:
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 起,is
和 switch
類型模式的模式表達式的類型可能為泛型類型參數。 這可能在檢查 struct
或 class
類型且要避免裝箱時最有用。
05 引用程式集生成
有兩個新編譯器選項可生成僅引用程式集:-refout 和 -refonly 。 鏈接的文章詳細介紹了這些選項和引用程式集。