码迷,mamicode.com
首页 > Windows程序 > 详细

C# 7.0中可能出现的语法

时间:2015-07-20 12:37:58      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

今天在MSDN上看到的微软关于微软关于C# 7.0特性的Work List,主要特性如下:

Tuple增强

Tuple的可读性一直不是很好, 很多时候宁愿新写一个类也不使用Item1, Item2这种不知何物的属性:

????public Tuple<int, int> Tally(IEnumerable<int> values) { ... }
????var t = Tally(myValues);
????Console.WriteLine($"Sum: {t.Item1}, count: {t.Item2}");

在C# 7.0中,则可以写成如下方式:

????public (int sum, int count) Tally(IEnumerable<int> values)
????{
????????var s = 0; var c = 0;
????????foreach (var value in values) { s += value; c++; }
????????return (s, c); // target typed to (int sum, int count)
????}

????(var sum, var count) = Tally(myValues); // deconstruct result
????Console.WriteLine($"Sum: {sum}, count: {count}");

这个基本上就是F#的那种写法了,可读性要好得多。

?

模式匹配

模式匹配最开始在C# 6.0的语法计划中见过,现在在C# 7.0中又见一次:

????Expr Simplify(Expr e)
????{
????????switch (e)
????????{
????????????case Mult(Const(0), *): return Const(0);
????????????case Mult(*, Const(0)): return Const(0);
????????????case Mult(Const(1), var x): return Simplify(x);
????????????case Mult(var x, Const(1)): return Simplify(x);
????????????case Mult(Const(var l), Const(var r)): return Const(l * r);
????????????case Add(Const(0), var x): return Simplify(x);
????????????case Add(var x, Const(0)): return Simplify(x);
????????????case Add(Const(var l), Const(var r)): return Const(l + r);
????????????case Neg(Const(var k)): return Const(-k);
????????????default: return e;
????????}
????}

看起来还是很不错的,对于需要的场合能大幅减少代码,感觉模式匹配和Tuples要搭配使用的,估计要有会一块都有吧。

?

非空引用

这个也是非常早就见过有人提出的,如果能正式启用的话还是非常给力的,代码里面那些地方要加NULL判断就非常明晰了,并且不会出现无法UT的NULL判断了。

????Dog! mandatoryDog = new Dog("Mandatory");
????mandatoryDog.Bark(); // OK - can call method on mandatory reference.
????string name = mandatoryDog.Name; // OK - can access property on mandatory reference.

异步支持的增强

这个也是一个比较大的改动,可能会对using, yield之类的语法糖加入异步支持,并引入IAsyncDisposable等,处理异步迭代就非常方便了,由于没找到什么合适的例子,这里就不列举了。

?

其它

另外还有其它许多非常有用的语法,感兴趣的朋友可以去https://github.com/dotnet/roslyn/issues/2136这儿看看。不过几乎可以肯定的是,C# 7.0不会支持这么多语法,倒是希望它能支持那些主要特性。

C# 7.0中可能出现的语法

标签:

原文地址:http://www.cnblogs.com/TianFang/p/4660727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!