HTML5技术

[干货来袭]C#7.0新特性(VS2017可用) - GuZhenYin(2)

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

switch (a){ case int b when b 0 :data = b + 100 ; break ; case int b:data =b++ ; break ; case string c:data = c + ; break ; default :data = null ; break ;} 在传入-1试试,看结果如下: 4.reflocals and re

switch (a) { case int b when b < 0: data = b + 100; break; case int b: data=b++; break; case string c: data= c + ; break; default: data = null; break; }

在传入-1试试,看结果如下:

 

 

4.ref locals and returns(局部引用和引用返回)

 暂时空着,待我研究透彻 - - ,

 

5.Local Functions (局部函数)

嗯,这个就有点颠覆..大家都知道,局部变量是指:只在特定过程或函数中可以访问的变量。

那这个局部函数,顾名思义:只在特定的函数中可以访问的函数(妈蛋 好绕口)

使用方法如下:

 

DoSomeing() { data = Dosmeing2(100, 200); Console.WriteLine(data); Dosmeing2(int a, int b) { return a + b; } }

呃,解释下来 大概就是在DoSomeing中定义了一个DoSomeing2的方法,..在前面调用了一下.(注:值得一提的是局部函数定义在方法的任何位置,都可以在方法内被调用,不用遵循逐行解析的方式)

 

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

C#6.0中,提供了对于只有一条语句的方法体可以简写成表达式。

如下:

public void CreateCaCheContext() => new CaCheContext(); CreateCaCheContext() { new CaCheContext(); }

但是,并不支持用于构造函数,析构函数,和属性访问器,那么C#7.0就支持了..代码如下:

CaCheContext(string label) => this.Label = label; // 析构函数的表达式写法 ~CaCheContext() => Console.Error.WriteLine(); private string label; Label { get => label; ; }

7.throw Expressions (异常表达式)

在C#7.0以前,我们想判断一个字符串是否为null,如果为null则抛除异常,我们需要这么写:

public string IsNull() { string a = null; if (a == null) { ); } return a; }

 

这样,我们就很不方便,特别是在三元表达式 或者非空表达式中,都无法抛除这个异常,需要写if语句.

那么我们在C#7.0中,可以这样:

public string IsNull() { string a = null; ); }

 

8.Generalized async return types (通用异步返回类型)

嗯,这个,怎么说呢,其实我异步用的较少,所以对这个感觉理解不深刻,还是觉得然并卵,在某些特定的情况下应该是有用的.

我就直接翻译官方的原文了,实例代码也是官方的原文.

异步方法必须返回 void,Task 或 Task<T>,这次加入了新的ValueTask<T>,来防止异步运行的结果在等待时已可用的情境下,对 Task<T> 进行分配。对于许多示例中设计缓冲的异步场景,这可以大大减少分配的数量并显著地提升性能。

官方的实例展示的主要是意思是:一个数据,在已经缓存的情况下,可以使用ValueTask来返回异步或者同步2种方案

public class CaCheContext { public ValueTask<int> CachedFunc() { return (cache) ? new ValueTask<int>(cacheResult) : new ValueTask<int>(loadCache()); } private bool cache = false; private int cacheResult; private async Task<int> loadCache() { Task.Delay(5000); cache = true; cacheResult = 100; return cacheResult; } }

调用的代码和结果如下:

Main(string[] args) { Action act = async () => { CaCheContext cc = new CaCheContext(); int data = await cc.CachedFunc(); Console.WriteLine(data); int data2 = await cc.CachedFunc(); Console.WriteLine(data2); }; // 调用委托 act(); Console.Read(); }

上面的代码,我们连续调用了2次,第一次,等待了5秒出现结果.第二次则没有等待直接出现结果和预期的效果一致.

 

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

这个就纯粹的是..为了好看了.

在C#7.0中,允许数字中出现"_"这个分割符号.来提高可读性,举例如下:

 

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

相关文章
  • 微信后台技术“干货们”带来的启发 - mindwind

    微信后台技术“干货们”带来的启发 - mindwind

    2017-02-22 12:00

  • 干货来袭-整套完整安全的API接口解决方案 - hubro

    干货来袭-整套完整安全的API接口解决方案 - hubro

    2017-01-05 17:00

  • 【干货分享】通用工具类 - Orson

    【干货分享】通用工具类 - Orson

    2016-12-23 13:00

  • 随便记的一些有趣的干货的地址 - 伍三思

    随便记的一些有趣的干货的地址 - 伍三思

    2016-10-25 12:00

网友点评
s