C#6.0新特性

    xiaoxiao2021-03-25  96

    C#6.0新特性

    首先

    自动属性初始化增强

    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. }

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

    转载请注明原文地址: https://ju.6miu.com/read-13569.html

    最新回复(0)