今天在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中可能出现的语法的更多相关文章

  1. 看看C# 6.0中那些语法糖都干了些什么(终结篇)

    终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...

  2. 看看C# 6.0中那些语法糖都干了些什么(中篇)

    接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...

  3. 看看C# 6.0中那些语法糖都干了些什么(上篇)

    今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...

  4. Vue2.0中v-for迭代语法变化(key、index)【转】

    转自:http://blog.csdn.net/sinat_35512245/article/details/53966788 Vue2.0的代码中发现 $key这个值并不能渲染成功,问题如下:但是v ...

  5. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  6. "bower.json 中出现语法错误" 的解决方案之一

    当你用 Visual Studio 2015 Update 3 打开从别处下载的开源项目的时候,如果发现 Bower 提示 "bower.json 中出现语法错误". 请检查一下. ...

  7. C# 6.0新特性---语法糖

    转载:http://www.cnblogs.com/TianFang/p/3928172.html 所谓语法糖就是在编译器里写做文章,达到简化代码书写的目的,要慎重使用,省略过多不易理解. NULL检 ...

  8. 关于ArcGIS10.0中的栅格计算中的函数

    版本升级确实很重要,在ArcGIS10.1中计算成功的,在10.0中出了问题. 问题 在进行栅格计算时,计算公式很简单,包括两个Ln函数: "-22.73 + 11.1 * Ln(5) + ...

  9. .NET 4.0中的泛型的协变和逆变

    转自:http://www.cnblogs.com/jingzhongliumei/archive/2012/07/02/2573149.html 先做点准备工作,定义两个类:Animal类和其子类D ...

随机推荐

  1. 图解IIS8上解决ASP.Net第一次访问慢的处理

  2. java版云笔记(五)

    下来是创建笔记本,创建笔记,这个没什么难点和前面是一样的. 创建笔记本 首先点击"+"弹出添加笔记的对话框,然后点击确定按钮创建笔记本. //点击"+"弹出添加 ...

  3. Bootstrap的使用。。。

    概览 深入了解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快.更强壮的最佳实践. HTML5 文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属 ...

  4. Percona XtraDB Cluster(PXC) -集群环境安装

    Percona XtraDB Cluster(PXC)   ---服务安装篇   1.测试环境搭建: Ip 角色 OS PXC-version 172.16.40.201 Node1 Redhat/C ...

  5. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...

  6. wondows下安装pytho&pip

    1.在https://www.python.org/downloads/下载相应的python安装包, 解压安装,配置环境变量. 2.下载pip安装包:https://pypi.python.org/ ...

  7. 写在Web考试后的一点小总结

    在实验室折腾附加题折腾了一个多钟没做出来……晚上回到宿舍决定再试一试,按原来的思路居然行了,目测在实验室的时候什么地方打错字了吧(心在流血) 实现晃过元素后出现跟随鼠标的悬浮窗,只有几行代码给我折腾了 ...

  8. 用js 的for循环打印三角形,提取水仙花数,求本月多少天

    第一题:用for循环打印三角形 //第一个 for(var x = 1;x <= 4;x++){ //控制行数 :由 1 到 4 for(var y = 1;y <= x;y++){ // ...

  9. C# HTML 生成 PDF

    原文出处:http://www.cnblogs.com/shanyou/archive/2012/09/07/2676026.html

  10. 【LOJ】#2012. 「SCOI2016」背单词

    题解 我们发现第一种操作肯定不可取,每个节点里它最近的点是它最长出现过的后缀,发现这就是AC自动机的fail节点,根据fail的关系这会是一棵树,而一个单词的前一个序号最大的后缀必定是它的父亲 然后我 ...