解构元组
- C#7.0 新增了诸多功能, 其中有一项是新元组(ValueTuple), 它允许我们可以返回多个值, 并且配合解构能更加方便的进行工作, 如下面例子
- static void Main(string[] args)
- {
- (var name, var age) = GetUser();
- Console.WriteLine($"name:{name}\nage:{age}");
- }
- public static (string name,int age) GetUser()
- {
- return ("张三", 11);
- }
可以看到解构元组可以写出优雅的代码, 并且可以使用类型推断, 但在这里解构元组并不是重点, 所以不过多关注, 下面说一个有趣的功能
解构对象
解构能力并不是只能解构元组, 他还有一个更加有意思的功能, 就是解构对象. 是不是听起来挺有意思.
- static void Main(string[] args)
- {
- var user = new User
- {
- Name = "张三",
- Age = 11,
- Email = "zhangsan@126.com",
- Sex="男"
- };
- (var name, var email) = user;
- Console.WriteLine($"name:{name}\nemail:{email}");
- }
上面代码是不是很惊奇, 反正我第一次看到时特别惊讶, 也感觉特别有意思, 那么这到底怎么实现的呢, 其实只是在类中添加一个解构函数 (Deconstruct) 就可以, 解构参数方法名称必须是 Deconstruct, 返回值必须是 void, 参数列表必须是 out
- public class User
- {
- public string Name { get; set; }
- public string Email { get; set; }
- public int Age { get; set; }
- public string Sex { get; set; }
- // 解构函数
- public void Deconstruct(out string name,out string email)
- {
- name = Name;
- email = Email;
- }
- }
是不是感觉特别简单, 哈哈,
解构函数还支持重载
- class Program
- {
- static void Main(string[] args)
- {
- var user = new User
- {
- Name = "张三",
- Age = 11,
- Email = "zhangsan@126.com",
- Sex="男"
- };
- (var name1, var email1) = user;
- Console.WriteLine($"name:{name1}\temail:{email1}");
- (var name2,var age2, var email2) = user;
- Console.WriteLine($"name:{name2}\tage:{age2}\temail:{email2}");
- }
- }
- public class User
- {
- public string Name { get; set; }
- public string Email { get; set; }
- public int Age { get; set; }
- public string Sex { get; set; }
- // 解构函数
- public void Deconstruct(out string name,out string email)
- {
- name = Name;
- email = Email;
- }
- // 结构函数重载
- public void Deconstruct(out string name,out int age,out string email)
- {
- name = Name;
- age = Age;
- email = Email;
- }
- }
但是解构不支持参数一致的重载
哪怕参数类型不一致
感觉像参数类型推断错误, 但是,,
所以解构函数并不参数数量相同的重载, 哪怕参数类型不一致
来源: https://www.cnblogs.com/yan7/p/9501638.html