.NET10 - 預覽版1新功能體驗(一)
.NET 10 首個預覽版已經在前兩天發布,該版本在 .NET Runtime、SDK、libraries、C#、ASP.NET Core、Blazor 和 .NET MAUI 等多個方面都有重大改進和增強。其中C# 14 預覽版也伴隨著.NET 10預覽版一起發布了,今天就和大家一起體驗一下.NET 10 和 C# 14 。

01、安裝
首先需要下載.NET 10.0.0-preview.1版本SDK,然后直接安裝即可。

安裝完成后,可以通過dotnet --list-sdks指令查看是否已成功安裝.NET 10 review 1。

除此之外還可以通過更新IDE Visual Studio 2022至最新版本。
02、創建.NET 10 類庫
下面我們就來在 Visual Studio 2022 中體驗.NET 10 。
但是當我們創建.NET 10類庫時,卻發現框架列表中并沒有.NET 10 選項,如下圖。

這是因為Visual Studio默認不可以使用預覽版的SDK。因此我們先要在IDE中開啟使用預覽版SDK功能,具體開啟方法如下:
首先選中菜單中的工具,然后點開選項對話框,在環境列表中找到預覽功能,找到使用.NET SDK預覽版復選框并選中,最后點擊確認即可。記得需要重啟Visual Studio。

我們再次創建.NET 10 類庫,此時發現框架列表中已經可以選擇.NET 10選項了,如下圖:

03、開啟C# 14預覽版
在.NET 10 預覽版 1 中也跟隨著發布了C# 14 預覽版。但是要想使用C# 14預覽版功能也是需要做一些設置的。
我們可以先選中上節創建的NET10類庫,然后右鍵鼠標,選擇屬性,找到生成中的高級選項,可以發現當前語言版本還是C# 13 ,如下圖。

因此我們需要選擇類庫,右鍵鼠標,選擇編輯項目文件,在PropertyGroup中添加

此時我們將可以使用C# 14 預覽版功能了。
04、C# 14功能體驗
1.field關鍵字
該關鍵字主要作用是在編寫屬性訪問器時,不需要額外顯示編寫一個后備字段。
下面我們看下新老版本中編寫一個屬性訪問器的差異,代碼如下:
//老版本寫法
private string _msg;
public string MessageOld
{
get => _msg;
set => _msg = value;
}
//新版本寫法
public string MessageNew
{
get;
set => field = value;
}
field關鍵字不單單是讓我們少寫一個后備字段使得代碼更簡潔,同時也使得代碼更安全,防止了因為不小心導致其他屬性方法錯誤使用后備字段。
其實該關鍵字在C# 13預覽版就已經有了,但是最終并包含進C# 13正式版本中,我個人還是很期待它可以進入C# 14 正式版本中的。
2.nameof表達式支持未綁定的泛型類型
在新的語法中,nameof表達式的參數可以是未綁定的泛型類型,如List<>,則結果為“List”,示例代碼如下:
var result = nameof(List<>);
Console.WriteLine($"nameof(List<>) 結果為:{result}");

而在老的語法中并不支持這樣寫,否則會報錯。
3.Span隱式轉換
在C# 14中對System.Span
下面我們就通過代碼演示在C# 14中,int數組隱式轉為Span
public static class SpanExtensions
{
public static void HandleSpan<T>(this Span<T> span)
{
}
public static void HandleReadOnlySpan<T>(this ReadOnlySpan<T> span)
{
}
}
static class Program
{
static void Main()
{
var array = new int[4] { 5, 6, 7, 8 };
//直接調用拓展方法,int數組隱式轉換為Span<int>
array.HandleSpan();
//直接調用拓展方法,int數組隱式轉換為ReadOnlySpan<int>
array.HandleReadOnlySpan();
Span<int> span = array;
//直接調用拓展方法,Span<int>隱式轉換為ReadOnlySpan<int>
span.HandleReadOnlySpan();
}
}
C# 14還有一些其他更新,后續我們將繼續講解。
注:測試方法代碼以及示例源碼都已經上傳至代碼庫,有興趣的可以看看。https://gitee.com/hugogoos/Planner

浙公網安備 33010602011771號