當前位置:
首頁 > 科技 > C#7.0新特性和語法糖詳解

C#7.0新特性和語法糖詳解

感謝IT之家網友 DotNet碼農的投稿

伴隨Visual Studio 2017的發布,C#7.0開始正式走上工作崗位。對於早已熟悉了舊版本C#的開發者來說,C#7.0增加的不少新特性和語法糖能在很大程度上提升編程效率並降低出錯率。本文將闡述C#7.0給出的9個改進。

1、元組——更優雅地返回多個值

之所以將元組放在第一位,是因為它對C#編程體驗的提升實在是太大了。元組這個概念在以前就已經被引入了C#,只不過它是通過一個名為Tuples的泛型類來實現的。使用這個泛型類雖然可以達到類似元組的效果,但是可讀性實在是太差了,完全就沒有辦法通過代碼理解函數返回的到底是什麼,本應該是人類友好的參數名不得不變成Item1、Item2這樣的抽象名稱。也正是因為如此,一般的開發者更傾向於自己定義一個結構來用於返回多個值。

C#7.0引入的元組語法能讓你更優雅地完成這一任務。你可以通過這種方式來表示一個函數的返回值類型:

在外部代碼里,你可以這樣來訪問這個元組類型包含的多個值:

這可比先前C#版本里,用Item1、Item2、Item3來表示元組元素的方法直觀多了,你也不必寫著寫著就要回去查看自己的函數返回的順序是怎樣的了。

當然,如果你不想用類型推斷和匿名元組類型的話,你還能這樣解構一個元組:

使用元組的前提,是你引用了來自微軟官方的System.ValueTuple包:

2、局部函數——函數作用域新玩法

鑒於元組可能會炸腦,所以現在來點輕鬆的——局部函數,這是比較容易理解的一個新特性。簡而言之,現在可以在函數里定義函數了,而且通常這個函數里的函數只能在外層函數里訪問。直接上例子:

C#7.0新特性和語法糖詳解

3、引用傳遞和引用返回——不必擔心值類型的引用傳遞

熟悉C#的朋友肯定知道,如果操作數是值類型,那麼賦值運算符(等號)默認傳遞是這個類型的值;但是某些時候,我們不希望C#「自作聰明」地給我們傳遞值,而希望傳遞這個值類型的引用。在C#7.0中,微軟重新利用了使用率不高的關鍵字ref,來表明我們要傳遞的是一個引用而不是值。下面是實例:

這段程序的輸出結果是3,而不是通常認為的0。原因是中間的那句賦值,我們告訴C#,我們要傳遞的是引用,而不是值。所以後來對b的值作出修改,a的值同步改變了。

類似的,我們可以用相同的方式來讓一個函數返回一個值類型的引用而不是它的值:

4、模式——比較和匹配的新玩法

作為一門基於類型的語言,「封箱」和「拆箱」操作肯定深入人心。拆箱之前,我們經常需要判斷這個箱子到底是什麼類型的(is運算符)。以前版本的C#有個模板式的寫法是:先用is運算符判斷封箱類型,然後用as運算符拆箱。現在這個模板式的語法可以被縮寫成這樣了:

不僅如此,C#7.0把這種東西稱作「模式匹配」,這讓你能用switch/case語句來批量判斷封箱類型,並用when關鍵字來限定拆箱結果的條件。比如:

C#7.0新特性和語法糖詳解

5、語法糖——out變數直接定義

以前在使用帶有out參數的函數的時候,我們必須先把要賦值的out參數定義好,在傳遞給函數。現在可以直接在傳遞的時候定義out參數了:

6、通用非同步返回類型

通常來說,非同步方法返回類型必須是void,Task或者Task,這種方式的明顯缺點,就是會在等待時但非同步結果已經可用的情況下,對Task進行分配。C#7.0加入了ValueTask泛型類型,用來解決上述問題,這能顯著提升部分非同步程序的性能。簡而言之,ValueTask會創建一個cache,用來緩存已經可用的值,而不至於每一次都等待一個相同的非同步方法執行完全相同的步驟。舉例子的話篇幅會比較長,所以煩請大家自己查閱MSDN。

7、語法糖——λ表達式現在支持了更多的函數

在C#7.0中,構造函數、析構函數和屬性訪問器也可以使用λ表達式了,比如:

8、語法糖——異常表達式

新增的運算符??(兩個半形問號)用於在引用為null的時候拋出異常:

9、語法糖——數字里可以添加下劃線增強可讀性

現在C#7.0認為,1234_5678和12345678是一個數字了。也就是,數字中的下劃線會被忽略。

總結:

C#7.0加入的新特性和語法糖可以非常有效地提升我們編程的效率,也更有利於降低錯誤率。了解它們,對以後的工作將帶來極大的幫助。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT之家 的精彩文章:

暴雪回應《守望先鋒》源氏大招刀數變少、輔助上分難問題
最新蘋果iPhone8設計圖曝光:垂直雙攝,指紋識別置於後殼
創始人從「女版喬布斯」淪為最美騙子,這家驗血公司開始「還債」
小米6真機搶先上手圖賞:亮銀探索版、亮藍四曲面玻璃生輝
華為官方首度公開回應:P10手機從未宣傳只採用特定快閃記憶體

TAG:IT之家 |

您可能感興趣

《奇蹟暖暖》3.4.0版本更新內容詳解 3.4.0版本更新了什麼內容?
6399:LOL9.23測試服更新內容詳解 9.23測試服更新了什麼?
《魔獸世界》7.2.5潛行者神器特效是什麼?7.2.5潛行者神器特效詳解
6399:LOL4.21測試服更新了什麼?LOL4.21測試服更新內容詳解
《LOL》4.12測試服更新內容詳解 LOL4.12測試服更新了什麼
Unity 2017.2正式發布,新功能詳解(上)
6399:魔獸世界7.2諾莫瑞根隱藏boss位置及打法詳解
6399:CF新道具2017萬聖節噴圖獲取方法圖文詳解
6399:DNF5.25改了什麼?5.25驅魔職業改動內容詳解
vue.js用法和特性詳解
簡潔的Java8-java8新特性詳解 編程語言
LOL新英雄奧恩強化詳解:1000塊換30點攻很良心?
【成長金字塔】學階六(3.5-4.5歲)寶寶技能詳解
6399:荒島求生v0.28造船方法圖文詳解
6399:尼爾機械紀元最新DLC服裝怎麼得?新服裝獲取方法詳解
2017勞力士新款Sea-Dweller詳解
新版本人馬喜迎加強 7.17新玩法詳解!
美漫發展歷程詳解:漫威&DC的80年(黃金篇)
日語一級考試231個語法詳解(上