标签:
今天在MSDN上看到的微软关于微软关于C# 7.0特性的Work List,主要特性如下:
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不会支持这么多语法,倒是希望它能支持那些主要特性。
标签:
原文地址:http://www.cnblogs.com/TianFang/p/4660727.html