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不会支持这么多语法,倒是希望它能支持那些主要特性。

  • 相关阅读:
    使用slot-scope复制vue中slot内容
    pre-commit钩子,代码质量检查
    vue 顶级组件
    Vue源码探究-事件系统
    vue 配置多页面应用
    vuex commit保存数据技巧
    在VUE中,关于CKEditor使用
    使用el-checkbox实现全选,点击失效没有反应
    vue组件之间的通信
    不做Next,争做Nest——庆科首届智能硬件创新设计大赛产生决赛12强
  • 原文地址:https://www.cnblogs.com/TianFang/p/4660727.html
Copyright © 2011-2022 走看看