感覺C#6.0新語法

做爲一門專爲程(yu)序(fa)員(tang)考慮的語言,感覺一下來自微軟的滿滿的惡意...

1. 字符串內聯
在以前的版本中,經常使用的格式化字符串:函數

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

在 C# 6 中:this

//無格式 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. 空條件運算符
在以前的版本中對於 可空類型 或 動態類型 ,獲取子元素每每較爲複雜:spa

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

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

return someSchool?.someGrade?.someClass?.someOne;
//也能夠使用下標運算,例如
//return someArray?[0];

若是 ?. 運算符的左項爲 null ,則直接返回 null 。
對於方法或者委託的執行,能夠使用 Invoke:orm

someMethod?.Invoke(args); 


3. nameof 表達式
能夠直接返回傳入變量的名稱,而無需複雜的反射。索引

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

注:若是是前面帶有命名空間和/或類名,只返回最後的變量名。

4. 索引初始化器
在 C# 6 中簡化了對 Dictionary 的初始化方法:ci

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 中能夠直接對屬性進行初始化:get

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

以及能夠相似定義只讀的屬性。

7. 成員函數的 lambda 定義
在 C# 6 中能夠使用 lambda 表達式來定義成員方法。string

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

相關文章
相關標籤/搜索