快速使用 C# 解构器 Deconstruct
解构 Deconstruct
解构器 Deconstruct 可以视为构造方法的逆过程
快速使用
在类的定义中加入方法名为 Deconstruct ,空返回值,public 访问修饰符的方法
参数列表使用 out type paramName 构建
例如
点击查看代码
public void Deconstruct(out string Name, out double Height)
{
Name = this.Name;
Height = this.Height;
}
在使用中可以通过解构元组接收解构器的返回
点击查看代码
Animals cat = new Animals() { Height = 30.0, Name = "cat" };
(string _, double height) = cat; //解构元组 _ 为弃用元素
元组可以使用别名,不一定需要使用默认命名 item1 item2 (C#7)
请注意,解构器并不会释放内存,因此可以在调用解构器之后,继续使用对象
解构器 Deconstruct 允许方法重载,因此一个 Class 中可以存在多个 Deconstruct 方法
实例解构的对称性
实例解构与构造器的元组赋值有一种对称的美
例如
点击查看代码
class Point
{
int X;
int Y;
public Point(int x, int y) => (X, Y) = (x, y); //构造
public void Deconstruct(out int x, out int y) => (x, y) = (X, Y); //解构
}
Deconstruct 使用参数作为解构的组合而不是直接返回一个元组
是为了进行方法重载,可以根据需要的数据数量进行不同的解构
编译器是怎么解析 Deconstruct 的
例如有如下解构代码
var(a, b) = instance;
编译器会将这段代码翻译成
点击查看代码
instance.Deconstruct(out var tempa,out var tempb);
var a = tempa;
var b = tempb;
因此实例解构的重载不支持参数的类型,只能对参数的数量进行重载