您的位置:首页 > 编程语言 > C#

C# 6.0可能的新特性

2016-07-20 23:34 615 查看

C# 6.0可能的新特性

1、主构造函数(Primary Constructors)

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

Before

public class Point {
private int x, y;

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


After

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


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

Before

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

public Point()
{
this.X = 100;
this.Y = 100;
}
}


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的全部新特性不止这么多,限于篇幅,就整理这些,若想了解更多,请参考下面的链接。

参考资料:

http://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation

http://en.wikipedia.org/wiki/.NET_Framework_version_history

http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated

http://www.kunal-chowdhury.com/2012/07/evolution-of-c-10-50-what-are-new.html

http://www.cnblogs.com/TianFang/p/3647144.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: