C# 6.0可能的新特性

1、主构造函数(Primary Constructors)

主构造函数给类中的变量赋值

Before

C# 6.0可能的新特性_html

public class Point {     private int x, y;      public Point(int x, int y)         this.x = x;         this.y = y;     } }

C# 6.0可能的新特性_html

After


public class Point(int x, int y) {     private int x, y; }


2、自动属性赋值(Auto Properties)

Before

C# 6.0可能的新特性_html

class Point     {         public int X { get; private set; }         public int Y { get; private set; }          public Point()         {             this.X = 100;             this.Y = 100;         }     }

C# 6.0可能的新特性_html

After


class Point     {         public int X { get; private set; } = 100;         public int Y { get; private set; } = 100;     }


3、using静态类(Static type using statements;)

using会把引用类的所有静态方法导入到当前命名空间

Before


public double A { get { return Math.Sqrt(Math.Round(5.142)); } }


After


using System.Math; ... public double A { get { return Sqrt(Round(5.142)); } }


4、Property Expressions

Before


public double Distance {     get { return Math.Sqrt((X * X) + (Y * Y)); } }


After


public double Distance => Math.Sqrt((X * X) + (Y * Y));


初看起来像Lambda表达式,其实和Lambda无关系。

5. Method Expressions

Before


public Point Move(int dx, int dy) {     return new Point(X + dx1, Y + dy1); }


After


public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);


这个和Property Expressions类似

6、Params for enumerables

Before


Do(someEnum.ToArray()); ... public void Do(params int[] values) { ... }


After


Do(someEnum); public void Do(params IEnumerable<Point> points) { ... }


以前params是只可以修饰array类型的参数,现在多了一些类型

7、Monadic null checking(null检查运算符)

Before


if (points != null) {     var next = points.FirstOrDefault();     if (next != null && next.X != null) return next.X; }    return -1;


After


var bestValue = points?.FirstOrDefault()?.X ?? -1;


这个少了好几行代码,赞啊

8、Constructor type parameter inference

Before


var x = MyClass.Create(1, "X"); ... public MyClass<T1, T2> Create<T1, T2>(T1 a, T2 b) {     return new MyClass<T1, T2>(a, b); }


After


var x = new MyClass(1, "X");


9、 Inline declarations for out params(内联out参数定义)

Before


int x; int.TryParse("123", out x);


After


int.TryParse("123", out int x);


说实话,这个很常用。


当然,C# 6.0的全部新特性不止这么多,限于篇幅,就整理这些,