推荐答案
在 C# 9.0 及更高版本中,with
表达式用于创建记录(record
)类型的副本,并允许在复制过程中修改部分属性。with
表达式提供了一种简洁的方式来创建不可变对象的修改版本。
public record Person(string FirstName, string LastName); var person1 = new Person("John", "Doe"); var person2 = person1 with { LastName = "Smith" }; Console.WriteLine(person1); // 输出: Person { FirstName = John, LastName = Doe } Console.WriteLine(person2); // 输出: Person { FirstName = John, LastName = Smith }
本题详细解读
with
表达式的基本用法
with
表达式主要用于记录类型(record
),它允许你创建一个新的记录实例,同时修改部分属性。记录类型是 C# 9.0 引入的一种新的引用类型,默认是不可变的,并且提供了值相等性比较。
语法结构
with
表达式的语法如下:
var newRecord = existingRecord with { Property1 = value1, Property2 = value2, ... };
existingRecord
是一个已存在的记录实例。Property1
,Property2
等是记录类型的属性。value1
,value2
等是你要为这些属性设置的新值。
示例解析
public record Person(string FirstName, string LastName); var person1 = new Person("John", "Doe"); var person2 = person1 with { LastName = "Smith" };
在这个示例中:
person1
是一个Person
记录类型的实例,初始化为FirstName = "John"
和LastName = "Doe"
。person2
是通过with
表达式从person1
创建的副本,但LastName
被修改为"Smith"
。
不可变性
记录类型是不可变的,这意味着一旦创建,其属性值就不能更改。with
表达式通过创建一个新的记录实例来实现“修改”操作,而不是修改现有实例。
适用场景
with
表达式特别适用于以下场景:
- 当你需要创建一个与现有对象几乎相同但稍有差异的新对象时。
- 当你处理不可变数据结构时,
with
表达式提供了一种简洁的方式来生成新的实例。
注意事项
with
表达式只能用于记录类型(record
),不能用于类(class
)或结构体(struct
)。with
表达式不会修改原始对象,而是返回一个新的对象。
通过 with
表达式,C# 提供了一种简洁且安全的方式来处理不可变对象的修改操作。