C#7的9個新語法

1、out變量

 

在c#7以前咱們得這樣express

 

 

在c#7中咱們能夠這樣編程

 

 

固然你還能夠使用「var」c#

 

 

這算一個小更新,其實這個問題存在好久了,應該也很好解決,不知爲什麼到c#7纔開始引入,無論如何之後能夠少些一行代碼了。異步

 

2、元組(Tuples)

 

須要安裝nuget包:System.ValueTupleasync

 

我的以爲這是c#7中帶來最cool也是最有用的變化了,咱們從頭來看。函數

 

你們還記得「Tuple」嗎?不記得?ok咱們看看它的定義。遞歸

 

 

 

在來看看使用內存

 

 

 

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

 

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

 

 

 

若是你以爲return (1,xxx)不夠準確,那麼你能夠

 

 

若是你不想result.xxx,那麼你還能夠「解構」

 

 

你還能夠這樣(不推薦)

 

 

 

還能夠在方法內臨時建立一個元組

 

 

經過這些特性咱們還能夠連續聲明並賦值變量了

 

 

解構類(不推薦)

 

 

3、模式匹配(Pattern matching)

 

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

在以前的版本中switch只能case常量,而如今能夠擁有更多的條件了

在c#7中咱們能夠這樣

 

 

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

 

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

 

 

5、本地函數(Local functions)

 

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

遞歸調用在c#7以前

 

 

在c#7中

 

 

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

 

 

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

 

 

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

 

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

 

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

 

在以前咱們想用「async」、「await」就必須使用Task做爲返回值(void特殊狀況忽略),但Task是一個引用類型(class),這樣在很是簡單的任務中會形成浪費(內存和gc)

 

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

 

 

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

 

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

 

相關文章
相關標籤/搜索