這篇筆記包含 C# 10 的兩項改進:結構(struct)類型的改進、匿名型別的非破壞式變形。
結構的改進
C# 10 的結構(struct)類型有兩處改進:無參數建構式、可使用 with
語法來進行初始化。
範例:
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point() // C# 9 無法編譯!
{
X = 5;
Y = 5;
}
}
第 6 行看起來沒什麼特別,只是不帶參數的建構式罷了,這在類別很常見,但 C# 9 的結構不允許這樣寫,到 C# 10 才可以。
接著看另一項改進:可使用 with
語法來進行初始化。
var p1 = new Point { X = 0, Y = 0 };
var p2 = point1 with { X = 5 }; // C# 9 不支援,C# 10 OK!
匿名型別的非破壞式變形
C# 9 新增了 with
關鍵字來對記錄(record)執行非破壞式變形(non-destructive mutation)。到了 C# 10,這個語法也能用於匿名型別:
var obj1 = new { X = 1, Y = 2, Z = 3 };
var obj2 = obj1 with { Y = 10 };
Console.WriteLine (obj2); // { X = 1, Y = 10, Z = 3 }
有關記錄的非破壞式變形語法,可參閱 C# 9 筆記的〈記錄:複製物件〉一節的說明。
Happy coding!
沒有留言: