在C# 9中引入了新的record類型,它是一種不可變的數(shù)據(jù)類型,用于表示具有一組相關(guān)屬性的值。record類型的創(chuàng)建和使用非常簡(jiǎn)單,下面是一些常見的用法:
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
上面的代碼定義了一個(gè)名為Person的record類型,該類型有兩個(gè)只讀屬性FirstName和LastName。
Person person = new Person { FirstName = "John", LastName = "Doe" };
上面的代碼創(chuàng)建了一個(gè)Person對(duì)象,并為其屬性指定了初始值。
Console.WriteLine(person.FirstName); // 輸出:John
Console.WriteLine(person.LastName); // 輸出:Doe
上面的代碼通過屬性訪問符"."來訪問record對(duì)象的屬性。
Person person1 = new Person { FirstName = "John", LastName = "Doe" };
Person person2 = new Person { FirstName = "John", LastName = "Doe" };
Console.WriteLine(person1 == person2); // 輸出:True
上面的代碼使用"=="運(yùn)算符比較兩個(gè)record對(duì)象的值是否相等,record類型會(huì)自動(dòng)實(shí)現(xiàn)值比較的邏輯。
Person updatedPerson = person with { FirstName = "Jane" };
上面的代碼通過使用with表達(dá)式更新record對(duì)象的屬性,該操作會(huì)返回一個(gè)新的record對(duì)象。
需要注意的是,record類型是不可變的,即一旦創(chuàng)建就不能修改其屬性的值。如果需要更新屬性值,必須使用with表達(dá)式來創(chuàng)建一個(gè)新的record對(duì)象。這種特性使record類型更適合表示不可變的數(shù)據(jù),例如DTO(數(shù)據(jù)傳輸對(duì)象)和領(lǐng)域模型等。