微軟于2015年7月21日發(fā)布了Visual Studio 2015, .NET 2015, .NET Framework 4.6, ASP.NET 4.6, Azure SDK 2.7 for .NET, C# 6.0, F# 4.0, TypeScript 1.5, Visual Studio Android 模擬器 等重量級(jí)開(kāi)發(fā)產(chǎn)品。
由于項(xiàng)目升級(jí)到了.NetFramework 4.6.1,開(kāi)發(fā)工具轉(zhuǎn)向了VS2015,趁機(jī)嘗試下C#6.0。結(jié)果網(wǎng)上的教程不進(jìn)人意,許久都沒(méi)有更新,只好自己做一下總結(jié)。
1.自動(dòng)屬性初始化(Auto-property initializers)
對(duì)于只讀屬性也可以這樣直接初始化(C#5.0不支持),也可以直接在構(gòu)造函數(shù)里初始化
2.字符串嵌入值(String interpolation)
在之前版本的String.Format中有多少個(gè)參數(shù)就要寫多少個(gè)占位符還必須按照順序,否則就報(bào)錯(cuò).參數(shù)一多,這樣搞的話確實(shí)頭疼.新版本中在字符串前用$來(lái)標(biāo)識(shí)后邊的字符可以使用{對(duì)象}來(lái)作為占位符.看個(gè)例子.
如果想輸出{或}符號(hào),寫兩個(gè)即可,如$"{{".
注意這個(gè)$符號(hào),網(wǎng)上的N多教程都是沒(méi)有這個(gè)東東的.是直接"/{ account.Age /}",這種方式在新版本里已經(jīng)被拋棄了.
3.導(dǎo)入靜態(tài)類(Using Static)
像之前使用Math這個(gè)靜態(tài)類的時(shí)候要先導(dǎo)入System命名空間后才能使用它.現(xiàn)在可以直接導(dǎo)入這個(gè)靜態(tài),然后代碼中直接使用其函數(shù).
注意這里是using static ...
如果某個(gè)命名空間下有n個(gè)方法,用這種方式直接引入單個(gè)靜態(tài)類而不用引用所有方法還是挺方便的.
4.空值運(yùn)算符(Null-conditional operators)
之前寫過(guò)無(wú)數(shù)個(gè)這樣的判斷代碼
現(xiàn)在使用可以簡(jiǎn)化這樣方式.
如果account.AgeList為空則整個(gè)表達(dá)式返回空,否則后邊的表達(dá)式的值.
5.對(duì)象初始化器(Index Initializers)
這種方式可以給字典或其他對(duì)象通過(guò)索引賦值初始化.
output:
key: 1 value:first
key: 2 value:second
6.異常過(guò)濾器(Exception filters)
當(dāng)when()里面返回的值不為true,將持續(xù)拋出異常,不會(huì)執(zhí)行catch里面的方法.
7.nameof表達(dá)式 (nameof expressions)
在對(duì)方法參數(shù)進(jìn)行檢查時(shí)經(jīng)常這樣寫:
如果某天參數(shù)的名字被修改了,下面的字符串很容易漏掉忘記修改.
使用nameof表達(dá)式后,編譯的時(shí)候編譯器將檢查到有修改后自動(dòng)導(dǎo)航與重構(gòu)(-_-! 不知道翻譯的對(duì)不對(duì))
8.在cath和finally語(yǔ)句塊里使用await(Await in catch and finally blocks)
c#5.0里是不支持這么寫.
9.在屬性里使用Lambda表達(dá)式(Expression bodies on property-like function members)
10.在方法成員上使用Lambda表達(dá)式
關(guān)于C#6.0新增加的語(yǔ)言特性目前為止也就這么多.沒(méi)有什么新功能,更多的是語(yǔ)法糖的改進(jìn).開(kāi)發(fā)更舒服更快速.
新聞熱點(diǎn)
疑難解答
圖片精選