您的位置:首页 > 编程语言 > C#

C# 7.0中可能出现的语法

2015-07-20 10:31 435 查看
今天在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不会支持这么多语法,倒是希望它能支持那些主要特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: