C# 10:結構的改進與匿名型別的非破壞式變形

 這篇筆記包含 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! 

沒有留言:

技術提供:Blogger.
回頂端⬆️