C#7的9個新語法


一、out變量

 

在c#7之前我們得這樣

 

 

在c#7中我們可以這樣

 

 

當然你還可以使用“var”

 

 

這算一個小更新,其實這個問題存在很久了,應該也很好解決,不知為何到c#7才開始引入,不管如何以后可以少些一行代碼了。

 

二、元組(Tuples)

 

需要安裝nuget包:System.ValueTuple

 

個人覺得這是c#7中帶來最cool也是最有用的變化了,我們從頭來看。

 

大家還記得“Tuple”嗎?不記得?ok我們看看它的定義。

 

 

 

在來看看使用

 

 

 

想不想哭。。講真,自我編程以來幾乎沒有用過Tuple,“ItemN”對開發者非常的不友好,我寧願創建一個struct或class來定義屬性器。

 

我們在c#7中試試(這也算多返回值了)?

 

 

 

如果你覺得return (1,xxx)不夠准確,那么你可以

 

 

如果你不想result.xxx,那么你還可以“解構”

 

 

你還可以這樣(不推薦)

 

 

 

還可以在方法內臨時創建一個元組

 

 

通過這些特性我們還可以連續聲明並賦值變量了

 

 

解構類(不推薦)

 

 

三、模式匹配(Pattern matching)

 

這一塊主要是對“switch”進行了豐富,有點類似c#6的異常過濾器

在之前的版本中switch只能case常量,而現在可以擁有更多的條件了

在c#7中我們可以這樣

 

 

四、本地引用和返回(Ref locals and returns)

 

這個個人比較少用,簡單寫個對比代碼

 

 

五、本地函數(Local functions)

 

這個是個很實用的功能,算是action、和func的豐富,我們來看一個例子:

遞歸調用在c#7之前

 

 

在c#7中

 

 

六、表達式可用於更多成員(More expression-bodied members)

 

 

七、表達式拋出異常(Throw expressions)

 

 

八、值類型的異步返回(Generalized async return types)

 

需要安裝nuget包:System.Threading.Tasks.Extensions

 

嚴格意義上這個不算一個語法的新特性而是增加了一些類。

 

在之前我們想用“async”、“await”就必須使用Task作為返回值(void特殊情況忽略),但Task是一個引用類型(class),這樣在非常簡單的任務中會造成浪費(內存和gc)

 

在c#7中微軟添加了一個nuget包,增加了一個新的類型“ValueTask”用來解決這個問題。它是值類型的。

 

 

九、數值語法改進(Numeric literal syntax improvements)

 

媽媽再也不怕我多加個0啦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM