HTML5技术

30分钟掌握 C#7 - 雨夜潇湘

字号+ 作者:H5之家 来源:H5之家 2017-04-10 14:08 我要评论( )

1.out 变量(out variables) 以前我们使用out变量必须在使用前进行声明,C# 7.0 给我们提供了一种更简洁的语法 “使用时进行内联声明” 。如下所示: 1 var input = ReadLine(); result)) 3 { ,result); 5 } { ); 9 } 上面代码编译后: 1 int num; 2 string

1. out 变量(out variables)

  以前我们使用out变量必须在使用前进行声明,C# 7.0 给我们提供了一种更简洁的语法 “使用时进行内联声明” 。如下所示:

1 var input = ReadLine(); result)) 3 { ,result); 5 } { ); 9 }

  上面代码编译后:

1 int num; 2 string s = Console.ReadLine(); 3 if (int.TryParse(s, out num)) 4 { , num); 6 } { ); 10 }

 原理解析:所谓的 “内联声明” 编译后就是以前的原始写法,只是现在由编译器来完成。

 备注:在进行内联声明时,即可直接写明变量的类型也可以写隐式类型,因为out关键字修饰的一定是局部变量。

2. 元组(Tuples)

 元组(Tuple)在 .Net 4.0 的时候就有了,但元组也有些缺点,如:

   1)Tuple 会影响代码的可读性,因为它的属性名都是:Item1,Item2.. 。

   2)Tuple 还不够轻量级,因为它是引用类型(Class)。

   备注:上述所指 Tuple 还不够轻量级,是从某种意义上来说的或者是一种假设,即假设分配操作非常的多。

 C# 7 中的元组(ValueTuple)解决了上述两个缺点:

   1)ValueTuple 支持语义上的字段命名。

   2)ValueTuple 是值类型(Struct)。

 1. 如何创建一个元组?

tuple2 = ValueTuple.Create(tuple3 = WriteLine($);

 原理解析:上面三种方式最终都是使用 new 运算符来创建实例。

 2. 如何创建给字段命名的元组?

(int one, int two) tuple = (1, 2); ); tuple2 = (one: 1, two: 2); ); (WriteLine($);

 注:左右两边同时指定字段名称,会使用左边的字段名称覆盖右边的字段名称(一一对应)。 

 原理解析:上述给字段命名的元组在编译后其字段名称还是:Item1, Item2...,即:“命名”只是语义上的命名。

 3. 什么是解构?

 解构顾名思义就是将整体分解成部分。

 4. 解构元组,如下所示:

1 var (one, two) = GetTuple(); );

1 static (int, int) GetTuple() 2 { 3 return (1, 2); 4 }

 原理解析:解构元组是将元组中的字段值赋值给声明的局部变量(编译后可查看)

 备注:在解构时“=”左边能提取变量的数据类型(如上所示),元组中字段类型相同时即可提取具体类型也可以是隐式类型,但元组中字段类型

 不相同时只能提取隐式类型。

 5. 解构可以应用于 .Net 的任意类型,但需要编写 Deconstruct 方法成员(实例或扩展)。如下所示:

Student 2 { 3 public Student(string name, int age) 4 { 5 Name = name; 6 Age = age; 7 } Name { get; set; } Age { get; set; } Deconstruct( age) 14 { 15 name = Name; 16 age = Age; 17 } 18 }

 使用方式如下:

, 30); );

 原理解析:编译后就是由其实例调用 Deconstruct 方法,然后给局部变量赋值。

 Deconstruct 方法签名:

Deconstruct(out type variable1, out type variable2...) Deconstruct(this type instance, out type variable1, out type variable2...)

 总结:1. 元组的原理是利用了成员类型的嵌套或者是说成员类型的递归。2. 编译器很牛B才能提供如此优美的语法。

使用 ValueTuple 则需要导入: Install - Package System.ValueTuple

 1. is 表达式(is expressions),如:

GetSum(IEnumerable<object> values) 2 { 3 var sum = 0; 4 if (values == null) return sum; (var item in values) 7 { ) { 10 sum += (short)item; 11 } (item { 14 sum += val; 15 } (item result)) { 18 sum += result; 19 } (item is IEnumerable<object> subList) 21 { 22 sum += GetSum(subList); 23 } 24 } sum; 27 }

 使用方法:

1 条件控制语句(obj is type variable) 2 { }

 原理解析:此 is 非彼 is ,这个扩展的 is 其实是 as 和 if 的组合。即它先进行 as 转换再进行 if 判断,判断其结果是否为 null,不等于 null 则执行

 语句块逻辑,反之不行。由上可知其实C# 7之前我们也可实现类似的功能,只是写法上比较繁琐。

 2. switch语句更新(switch statement updates),如:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    2017-03-21 10:00

  • 微信小程序开发—快速掌握组件及API的方法 - iyifei

    微信小程序开发—快速掌握组件及API的方法 - iyifei

    2017-01-05 16:02

  • 30分钟带你熟练性能优化的那点儿事儿(案例说明) - Double_K

    30分钟带你熟练性能优化的那点儿事儿(案例说明) - Double_K

    2016-12-13 11:00

  • 深究angularJS系列 - 第二弹 - 雨夜羽翼

    深究angularJS系列 - 第二弹 - 雨夜羽翼

    2016-10-29 10:00

网友点评
y