隨著.NET 6.0的到來,微軟更新了C#的版本10.0,這邊簡單介紹一下.NET 6.0與C#10.0的內容,也讓自己在寫文章的同時熟悉過一次這些微軟所提供的新功能,並在一次思考如何達成寫出更好的程式的目標。
-
- Hot reload在開發期間會對Razor、C#、CSS文件在變更的時候將會重新載入,在Visuall Studio2022執行後,會看到一個火焰的熱重載功能,以往改C#的檔案時,都要重新啟動才能重新載入,但現在只要按下熱重載按鈕即可,甚至還可以選擇檔案儲存時自動熱重載,在需要反覆Debug的時候,是十分方便的功能
- Minimal APIs在C#9.0就有推出的Top-level statements會讓Main在控制台應用的項目內只剩下簡單的Console.WriteLine(“Hello World!”);,而在C#10.0也擴充至API專案了,現在只需要幾行代碼就可以建立一個ASP.NET Core專案,但要注意的是隨著新的寫法,還是要去了解省略了什麼東西,如using、namespace等等
- Bootstrap 5.1範本改為使用Bootstrap 5.1版本
- IAsyncDisposable新增IAsyncDisposable 介面並用在controllers、page models、 view
- CSS隔離新增CSS隔離檔(.cshtml.css),將CSS樣是隔離到各別頁面,增加可維護性、減少樣式衝突,以MVC的Index.cshtml為例,新增Views/Index.cshtml.css
- JavaScript隔離新增JavaScript隔離檔(.cshtml.js),將JavaScript與View隔離,以MVC的Index.cshtml為例,新增Views/Index.cshtml.js
- 效能改進這次6.0也做了一次大量的效能改進,以下資訊來自微軟官方部落格
Method Runtime Mean Format .NET 5.0 13.21 ns Format .NET 6.0 10.37 ns Format 效能提升約25%
Method Runtime Mean Find .NET 5.0 69.8 us Find .NET 6.0 53.4 us Find 效能提升約30%
Method Runtime Mean Compare .NET 5.0 9.193 ns Compare .NET 6.0 2.533 ns Find 效能提升約362%
Method Runtime Mean GetLength .NET 5.0 0.1223 ns GetLength .NET 5.0 0.0204 ns GetLength 效能提升約600%
- Global using在Using前面加上Global就可以套用在所有的介面
- File IO 改進讀寫檔案常用到的FileStream在.NET6幾乎整個重寫了,亮點在於提高了異步文件IO的性能,這次重寫的效能改進可以套用在所有的作業系統上,不管是Windows的用戶,甚至是macOS、Linux的用戶都可以顯著的感受到FileStream的性能改進。
- System.Linq — Enumerable support for Index and Range parametersEnumerable的方法現在可以接受來自可枚舉末尾的索引,如以下範例所示Enumerable.Take(..5)來取代Enumerable.Take(5)
Enumerable.Take(5..)來取代Enumerable.Skip(5)
Enumerable.Take(5..7)來取代Enumerable.Take(7).Skip(5)
Enumerable.Take(^5..)來取代Enumerable.TakeLast(5)
Enumerable.Take(..^5)來取代Enumerable.SkipLast(5)
Enumerable.Take(^7..^5)來取代.Enumerable.TakeLast(7).SkipLast(5)
結論
這次的.NET6.0是LTS版本,代表的是微軟將會在三年內持續地更新,若是手邊還有.NET5.0版本的專案,筆者是相當建議升級至.NET6的,何況升級的過程也不繁瑣。儘管一直跟隨著新功能代表的是會一直需要花費多餘的時間成本去學習,但如果總是滿足於現有的技術,是不夠的,最好還是花點時間至少讀過所有新的技術才合適。
礙於篇幅只介紹了部分的新功能,除了以上所講的,還有Record Struct、Blazor改進、Lambdas改進、Single Page App加強對Angular 12 及 React 17前端框架的支援等等相當多的新功能,想了解全部請參考: https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-10,若有需要從.NET5升級到.NET6.0也不用擔心,只需修改幾個地方就可升級,請參考: https://docs.microsoft.com/zh-tw/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&tabs=visual-studio,在另外附上微軟提供的.NET Core 3.1升級到.NET 6.0 的文件https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-60?view=aspnetcore-6.0&tabs=visual-studio
參考來源
- https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-10
- https://devblogs.microsoft.com/dotnet/announcing-asp-net-core-in-net-6/?WT.mc_id=DOP-MVP-37580
- https://docs.microsoft.com/zh-tw/aspnet/core/release-notes/aspnetcore-6.0?view=aspnetcore-6.0
- https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/top-level-statements?WT.mc_id=DT-MVP-4015686
- https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/?WT.mc_id=DOP-MVP-37580
- https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/?WT.mc_id=DOP-MVP-37580
- https://devblogs.microsoft.com/dotnet/announcing-net-6/