with 表达式在 C# 9.0 及更高版本中可用,使用修改的特定属性和字段生成其操作数的副本。 使用对象初始值设定项语法来指定要修改的成员及其新值:

如以下示例所示,with 表达式结果与表达式操作数的运行时间类型相同:

对于引用类型成员,在复制操作数时仅复制对成员实例的引用。 副本和原始操作数都具有对同一引用类型实例的访问权限。 以下示例演示了该行为:

任何记录类类型都具有复制构造函数。 复制构造函数是一个包含记录类型的单个参数的构造函数。 它将参数的状态复制到新的记录实例。 在评估 with 表达式时,将调用复制构造函数,以基于原始记录实例化新记录实例化。 之后,新实例将根据指定的修改进行更新。 默认情况下,复制构造函数是隐式的,即编译器生成的。 如果需要自定义记录复制语义,请显式声明具有所需行为的复制构造函数。 下面的示例使用显式复制构造函数更新前面的示例。 复制记录时,新的复制行为是复制列表项而不是列表引用:

有关详细信息,请参阅记录功能建议说明的以下部分: