HTML5技术

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

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

1 var list = new List int (); n = ref list.Count; // error: 属性或索引器不能作为 out 或 ref 参数传递 原理解析: 非常简单就是指针传递,并且个人觉得此语法的使用场景非常有限,都是用来处理大对象的,目的

1 var list = new List<int>(); n = ref list.Count; // error: 属性或索引器不能作为 out 或 ref 参数传递

 原理解析:非常简单就是指针传递,并且个人觉得此语法的使用场景非常有限,都是用来处理大对象的,目的是减少GC提高性能。

5. 局部函数(Local functions)

 C# 7 中的一个功能“局部函数”,如下所示:

1 static IEnumerable<char> GetCharList(string str) 2 { 3 if (IsNullOrWhiteSpace(str)) ArgumentNullException(nameof(str)); GetList(); 7 8 IEnumerable<char> GetList() 9 { 10 for (int i = 0; i < str.Length; i++) 11 { str[i]; 13 } 14 } 15 }

 使用方法:

1 [数据类型,void] 方法名([参数]) 2 { }

 原理解析:局部函数虽然是在其他函数内部声明,但它编译后就是一个被 internal 修饰的静态函数,它是属于类,至于它为什么能够使用上级函

 明跟位置无关,并可无限嵌套。

 总结:个人觉得局部函数是对 C# 异常机制在语义上的一次补充(如上例),以及为代码提供清晰的结构而设置的语法。但局部函数也有其缺点,

 就是局部函数中的代码无法复用(反射除外)。

6. 更多的表达式体成员(More expression-bodied members)

 C# 6 的时候就支持表达式体成员,但当时只支持“函数成员”和“只读属性”,这一特性在C# 7中得到了扩展,它能支持更多的成员:构造函

set 访问器的属性、以及索引器。如下所示:

Student 2 { _name; Student(string name) => _name = name; ~Student() => Console.WriteLine(); Name 13 { 14 get => _name; ; 16 } [string name] => Convert.ToBase64String(Encoding.UTF8.GetBytes(name)); 20 }

 备注:索引器其实在C# 6中就得到了支持,但其它三种在C# 6中未得到支持。

7. Throw 表达式(Throw expressions) 

 异常机制是C#的重要组成部分,但在以前并不是所有语句都可以抛出异常的,如:条件表达式(? :)、null合并运算符(??)、一些Lambda

Student 2 { _name = GetName() ?? throw new ArgumentNullException(nameof(GetName)); _age; Age 8 { 9 get => _age; ArgumentException() : value; 11 } GetName() => null; 14 }

8. 扩展异步返回类型(Generalized async return types) 

 以前异步的返回类型必须是:Task、Task<T>、void,现在 C# 7 中新增了一种类型:ValueTask<T>,如下所示:

ValueTask<int> Func() 2 { 3 await Task.Delay(3000); ; 5 }

 总结:ValueTask<T> 与 ValueTuple 非常相似,所以就不列举: ValueTask<T> 与 Task 之间的异同了,但它们都是为了优化特定场景性能而

 新增的类型。

使用 ValueTask<T> 则需要导入: Install - Package System.Threading.Tasks.Extensions

9. 数字文本语法的改进(Numeric literal syntax improvements) 

 C# 7 还包含两个新特性:二进制文字、数字分隔符,如下所示:

 

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

网友点评
s