感受C#6.0新语法

作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意...

1. 字符串内联
在之前的版本中,常用的格式化字符串:

var s = String.Format("{0} is {1} year{{s}} old", p.Name, p.Age); 

在 C# 6 中:

//无格式
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"; 


2. 空条件运算符
在之前的版本中对于 可空类型 或 动态类型 ,获取子元素往往较为复杂:

if(someSchool != null && someSchool.someGrade != null && someSchool.someGrade.someClass != null) { return someSchool.someGrade.someClass.someOne; } 

在 C# 6 中,引入了新的运算符:

return someSchool?.someGrade?.someClass?.someOne;
//也可以使用下标运算,例如
//return someArray?[0];

如果 ?. 运算符的左项为 null ,则直接返回 null 。
对于方法或者委托的执行,可以使用 Invoke:

someMethod?.Invoke(args); 


3. nameof 表达式
可以直接返回传入变量的名称,而无需复杂的反射。

int someInt;
Console.WriteLine(nameof(someInt)); //"someInt" 

注:如果是前面带有命名空间和/或类名,只返回最后的变量名。

4. 索引初始化器
在 C# 6 中简化了对 Dictionary 的初始化方法:

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


5. 条件异常处理
在 C# 6 中可以选择性地对某些异常进行处理,无需额外增加判断过程:

try { } 
catch (MyException e) if (myfilter(e)) { } 


6. 属性初始化器
在 C# 6 中可以直接对属性进行初始化:

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

以及可以类似定义只读的属性。

7. 成员函数的 lambda 定义
在 C# 6 中可以使用 lambda 表达式来定义成员方法。

public class Point
{
    public Point Move(int dx, int dy) => new Point(x + dx, y + dy); public static Complex operator +(Complex a, Complex b) => a.Add(b); public static implicit operator string(Person p) => $"{p.First}, {p.Last}"; } 


8. 结构体的参数构造函数
在 C# 6 中可以创建结构体的带参数构造函数。

struct Person 
{ 
    public string Name { get; } public int Age { get; } public Person(string name, int age) { Name = name; Age = age; } public Person() : this("Jane Doe", 37) { } } 


9. using 静态类
在 C# 6 中 using 除了可以用于命名空间也可以用于静态类。

using System.Console; 
using System.Math; class Program { static void Main() { WriteLine(Sqrt(3*3 + 4*4)); } } 


来自:http://www.zhihu.com/question/27421302

转载于:https://www.cnblogs.com/zpc870921/p/4483341.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值