C#11有那些新功能呢?下面簡單介紹一下
1、C# 11 預覽:允許在內插字符串的“插值表達式”中換行
C# 支持兩種樣式的內插字符串:逐字和非逐字內插字符串。它們之間的主要區別在於,非逐字內插字符串不能在其文本段中包含換行符,而必須改用轉義(如 \r\n)。逐字內插字符串可以在其文本段中包含換行符,並且不轉義換行符或其他字符(""除外,用於轉義引號本身)。
而C#11允許在內插字符串的“插值表達式”中換行,如下示例:
var v = $"Count ist: { this.Is.Really.Something().That.I.Should(be + able)[to.Wrap()] }.";
以上情況將導致 C# 10 中的編譯器錯誤,在 C# 11 預覽版中是合法的。
2、C# 11 預覽:列表模式
新的列表模式允許您與列表和數組進行匹配。您可以匹配元素,也可以選擇包括與零個或多個元素匹配的切片圖案。使用切片模式,可以丟棄或捕獲零個或多個元素。
列表模式的語法是用方括號括起來的值,切片模式的語法是兩個點 ..。切片模式后面可以跟着另一個列表模式,比如 var 模式來捕獲切片內容。
比如,該模式匹配以下所有內容:[1, 2, .., 10]:
int[] arr1 = { 1, 2, 10 };int[] arr1 = { 1, 2, 5, 10 };int[] arr1 = { 1, 2, 5, 6, 7, 8, 9, 10 };
要探索列表模式,請參考:
public static int CheckSwitch(int[] values)=> values switch{[[[[[};
當它傳遞以下數組時,結果如下所示:
WriteLine(CheckSwitch(new[] { 1, 2, 10 })); // prints 1WriteLine(CheckSwitch(new[] { 1, 2, 7, 3, 3, 10 })); // prints 1WriteLine(CheckSwitch(new[] { 1, 2 })); // prints 2WriteLine(CheckSwitch(new[] { 1, 3 })); // prints 3WriteLine(CheckSwitch(new[] { 1, 3, 5 })); // prints 4WriteLine(CheckSwitch(new[] { 2, 5, 6, 7 })); // prints 50
您還可以捕獲切片模式的結果:
public static string CaptureSlice(int[] values)=> values switch{[[};
列表模式適用於任何可數和可編制索引的類型,這意味着它具有可訪問的或屬性,而索引器具有 or 參數。切片模式適用於任何可數和可切片的類型,這意味着它具有將 a 作為參數的可訪問索引器,或者具有具有兩個參數的可訪問方法。
目前正在考慮在 IEnumerable 類型上添加對列表模式的支持,點此查看關於該列表模式的詳細介紹。
3、 C# 11 預覽:新的參數空值檢查
C# 11 提供了一種簡化的語法,用於驗證方法的參數不是 null ,以及正確拋出 ArgumentNullException。
以前可以使用樣板代碼的變體來驗證方法參數是否為空:
public static void M (string s){if (s is null){throw new ArgumentNullException (nameof (s));}// Body of the method}
使用新的參數 null 檢查,可以通過添加 !! 到參數名,自動執行空值檢查:
public static void M (string s!!){// Body of the method}
自動生成的空值檢查代碼將在方法主體的代碼之前執行。對於構造器,該空值檢查發生在字段初始化、調用 base 構造函數和調用 this 構造函數之前。
總結
Visual Studio 17.1 和 .NET SDK 6.0.200 提供了對 C# 11 的早期版本。您可以使用參數空值檢查、列表模式和內插字符串有關該新的參數空值檢查等。請下載相關SDK體驗吧!
出處:https://devblogs.microsoft.com/dotnet/category/csharp/
