• [干货来袭]C#6.0新特性


    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化..

    分享一下也是昨天发布的新的C#6.0的部分新特性吧...

    当然..我也没用过 - -,主要是参考国外某位的一篇文章..很详细,英文好的可以自行去看

    https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

    首先

    自动属性初始化增强

    public class Customer
    {
        public string First { get; set; } = "Jane";
        public string Last { get; set; } = "Doe";
    }

    public class Customer
    {
        public string First { get; } = "Jane";
        public string Last { get; } = "Doe";
    }
    public class Customer
    {
       //只读的属性  
        public string Name { get; };
        //在初始化方法中赋值,可行~
        public Customer(string first, string last)
        {
            Name = first + " " + last;
        }
    }

    在C#5.0中是不可行的 如下图:

    方法函数支持lambda写法 如下:

    public void Print() => Console.WriteLine(First + " " + Last);

    支持直接导入命名空间一样导入静态类,而不用在代码中使用静态类名 如下:

    //静态导入Console
    using static System.Console;
    using static System.Math;
    using static System.DayOfWeek;
    class Program
    {
        static void Main()
        {
            //直接使用方法而不用Console.WriteLine
            WriteLine(Sqrt(3*3 + 4*4)); 
            WriteLine(Friday - Monday); 
        }
    }

    扩展方法,(这个不是很懂,解释不好请原谅)

    在Main类中静态的导入你要扩展的类型,然后写你需要扩展的方法..?.. - -,不懂..

    using static System.Linq.Enumerable; // The type, not the namespace
    class Program
    {
        static void Main()
        {
            var range = Range(5, 17);                // Ok: not extension
            var odd = Where(range, i => i % 2 == 1); // Error, not in scope
            var even = range.Where(i => i % 2 == 0); // Ok
        }
    }

    非空的语法糖如下:

    int? first = customers?[0].Orders.Count();
    //上面的写法等同于下面
    int? first = (customers != null) ? customers[0].Orders.Count() : null;

    字符串格式化新玩法:

    //原来的,我们需要这样..
    var s = String.Format("{0} is {1} year{{s}} old", p.Name, p.Age);
    
    //C#6.0中,直接如下:
    var s = $"{p.Name} is {p.Age} year{{s}} old";
    
    //在{}中甚至可以是任意的..(单词不会..表达式还是什么鬼.. - -,)反正如下:
    var s = $"{p.Name,20} is {p.Age:D3} year{{s}} old";
    var s = $"{p.Name} is {p.Age} year{(p.Age == 1 ? "" : "s")} old";

    索引初始化:

    var numbers = new Dictionary<int, string> {
        [7] = "seven",
        [9] = "nine",
        [13] = "thirteen"
    };

    异常过滤器:

    如果When中用括号括起来的表达式计算结果为true,catch块中运行,否则异常持续。

    ( - -,然而我也并没有搞懂..求大神解释..)

    try { … }
    catch (MyException e) when (myfilter(e))
    {
        …
    }

    可异步等待的Catch块:

    Resource res = null;
    try
    {
        res = await Resource.OpenAsync(…);       // You could do this.
        …
    } 
    catch(ResourceException e)
    {
        await Resource.LogAsync(res, e);         // Now you can do this …
    }
    finally
    {
        if (res != null) await res.CloseAsync(); // … and this.
    }

    基本到此就结束了, - -,水平有限.不好与不完善的地方请指出..免得误导大家..

  • 相关阅读:
    MySQL安装图解
    程序员感触
    一个人的生活
    开始懂了
    limit 检索记录行
    Ajax的完整兼容各种浏览器版本代码
    java.lang.UnsupportedClassVersionError: Unsupported major.minor version 49.0的错误 [转]
    通信协议
    SDK
    毕业三个多月的感悟
  • 原文地址:https://www.cnblogs.com/GuZhenYin/p/4663562.html
Copyright © 2020-2023  润新知