標籤:.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新特性