zoukankan      html  css  js  c++  java
  • C# 7.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不会支持这么多语法,倒是希望它能支持那些主要特性。

  • 相关阅读:
    mysql表的操作
    mysql 索引
    JQuery
    js
    cobbler一键批量安装系统
    rabbitmq-cluster搭建
    KVM嵌套虚拟化nested之CPU透传
    kvm虚拟机管理
    dlib(【机器学习库】含有多线程网络容器等基础功能】)
    ScriptCommunicator(各种通讯方式测试串口can网络等)
  • 原文地址:https://www.cnblogs.com/TianFang/p/4660727.html
Copyright © 2011-2022 走看看