请解释 C# 中的解构赋值,并说明如何在元组以及用户自定义类型中实现和使用解构。
考察说明
考查对 C# 解构语法及其在元组和自定义类型中应用的理解。
回答思路
- 【回答框架 1】解构赋值是 C# 7.0 提供的语法,允许将对象成员拆分为多个变量,典型应用是元组解构和自定义类型的 Deconstruct 方法。
- 【回答框架 2】元组解构:由于元组具有 ValueTuple 结构,编译器支持直接解构,例如 (int x, int y) = tuple,或使用 var 推断。
- 【回答框架 3】自定义类型解构:需要在类型中定义 Deconstruct 方法,该方法必须为 public 实例方法,返回 void,参数为 out 类型,参数顺序映射到解构变量。例如 Point 类定义 Deconstruct(out int x, out int y),则 var (px, py) = point 将调用该方法并赋值。
- 【回答框架 4】解构时支持丢弃符 _,表示忽略该位置的成员,例如 var (x, _) = point 只取第一个成员。
- 【回答框架 5】解构语法可以嵌套,例如 (var x, (var y, var z)) = tuple,适用于复杂结构。
- 【关键点 1】解构赋值语法为 var (变量列表) = 对象 或 (变量列表) = 对象。
- 【关键点 2】元组解构直接按位置赋值。
- 【关键点 3】自定义类型需定义 Deconstruct 方法,参数为 out,顺序对应变量顺序。
- 【关键点 4】支持丢弃符 _ 忽略成员。
- 【关键点 5】解构常用于多值返回,提高代码清晰度。
- 【易错点 1】Deconstruct 方法参数必须为 out,且返回类型必须是 void,否则不符合解构模式。
- 【易错点 2】解构变量数必须与 Deconstruct 参数数相同,否则编译错误。
- 【易错点 3】自定义类型的 Deconstruct 方法必须是实例方法(除非作为扩展方法),且不能是私有。