[乾貨來襲]C#6.0新特性

來源:互聯網
上載者:User

標籤:.net   pre   mon   res   int()   技術   ogr   extension   log   

微軟昨天發布了新的VS 2015 ..隨之而來的還有很多很多東西... .NET新版本 ASP.NET新版本...等等..太多..實在沒消化..

分享一下也是昨天發布的新的C#6.0的部分新特性吧...

當然..我也沒用過 - -,主要是參考國外某位的一篇文章..很詳細,英文好的可以自行去看

https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

 

首先

自動屬性初始化增強
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);
支援直接匯入命名空間一樣匯入靜態類,而不用在代碼中使用靜態類名 如下:
//靜態匯入Consoleusing 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 namespaceclass 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.}

基本到此就結束了, - -,水平有限.不好與不完善的地方請指出..免得誤導大家..

 

[乾貨來襲]C#6.0新特性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.