當前位置:係統粉 >   IT資訊 >   業界資訊 >  C#7.0新特性和語法糖詳解

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

時間:2017-04-19 來源:互聯網 瀏覽量:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6、通用異步返回類型

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

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

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

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

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

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

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

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

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

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

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

總結:

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

我要分享:

最新熱門遊戲

版權信息

Copyright @ 2011 係統粉 版權聲明 最新發布內容 網站導航