C#6.0新特性

jopen 9年前發布 | 12K 次閱讀 C# .NET開發

 

微軟昨天發布了新的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中是不可行的 如下圖:

C#6.0新特性

方法函數支持lambda寫法 如下:

public void Print() => Console.WriteLine(First + " " + Last);

支持直接導入命名空間一樣導入靜態類,而不用在代碼中使用靜態類名 如下:

//靜態導入Console
using 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 namespace
class 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";</pre>

索引初始化:

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.
}

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!