隨著.NET 5.0的到來,微軟更新了C#的版本9.0,這邊簡單介紹一下C#9.0的內容,也讓自己在寫文章的同時熟悉過一次這些微軟所提供的新功能。
1. 記錄類型(record type)
record是種新的參考類型(reference type),同樣為參考類型的還有class、struct,record專門用來使用在不會經常改變、不必經常裝箱(boxing)的資料,值得注意的是,若new了兩次完全相同的class,==會是false;但若是使用record,==會return true。如下方程式碼所示
2. 僅供初始化的 Setter
9.0新增了init的存取子(Setter),使得值只能在初始化時候填入,如下方程式碼所示
3. 最上層陳述式
這是一個方便平常寫小工具時的功能,現在如果只是想寫一行”Hello World!”,其他行都可以不必寫,cs檔案裡面真的只需要寫一行System.Console.WriteLine(“Hello World!”);,但要注意的是一個專案裡面,只能有一個檔案使用最上層陳述式,否則會報錯誤,且使用最上層陳述式在專案可能會讓其他人感到混亂,所以最好還是在自己使用的小工具或是教學範本裡使用就好。
4. 模式比對增強功能
可以用邏輯運算符號互相結合,有and、or、not,以前的if not null可能只能這樣寫
if (!(e is null)) { … }
但是現在可以改成這樣
if (e is not null) { … }
5. with表達式
這個9.0新增的表達式只能在前面1.提到的record紀錄類型中使用,在以前要建立新的物件要如何達成?必須重新new就算跟以前的物件完全相同,但現在配合新的with表達式即可清楚簡單的建立新物件,跟record型態更是搭配,以下拿1.的範例稍作修改,現在我們需要建立一個triStudentRecord但只有Name需要更改,這時候就是用with的好時機,如下方程式碼所示
6. 省略 new 運算式中的型別
在9.0如果要new的時候,已經宣告了明確的類型,則可以直接使用new 不需要後面打一次型別,如下方程式碼所示
結論:
每次隨著.NET版本的更新,微軟都會一起更新C#的版本,.NET新的功能固然吸引人,但C#的更新內容也是很重要,每次更新後最好都讀過一輪的更新內容,否則哪天維護新的專案時。發現看不懂的新寫法;又或著自己需要開新專案時,也可以直接使用這些新功能為你帶來一些方便,何嘗不是種好事呢!
還有一些未提到的新功能,詳細更新內容請觀看微軟C#9.0官方文件: https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-9