1、索引初始化
使用程式碼
var numbers2 = new Dictionary<int, string> {[7] = "seven", [9] = "nine", [13] = "thirteen"};
編譯器生成的程式碼
Dictionary<int, string> dictionary2 = new Dictionary<int, string>(); dictionary2[7] = "seven"; dictionary2[9] = "nine"; dictionary2[13] = "thirteen"; Dictionary<int, string> dictionary = dictionary2;
2、異常過濾器When
使用程式碼
try { throw new ArgumentException("string error"); } catch (Exception e) when(MyFilter(e)) { WriteLine(e.Message); } private static bool MyFilter(Exception e) { return e is ArgumentException; }
When語法作用是:在進入到catch之前、驗證when括號裡MyFilter方法返回的bool,如果返回true繼續執行,false不走catch直接丟擲異常。
使用這個filter可以更好的判斷一個錯誤是繼續處理還是重新丟擲去。按照以前的做法,在catch塊內如需再次丟擲去,需要重新throw出去,這時的錯誤源是捕捉後在拋的,而不是原先的,有了when語法就可以直接定位到錯誤源。
3、catch和finally程式碼塊內的await
Await非同步處理是在c#5.0提出的,但不能在catch和finally程式碼塊內使用,這次在C#6.0更新上支援了。
使用程式碼:
async void Solve() { try { await HttpMethodAsync(); } catch (ArgumentException e) { await HttpMethodAsync(); } finally { await HttpMethodAsync(); } }
3、nameof表示式
使用程式碼:
string nameOfAuthor; WriteLine(nameof(nameOfAuthor));
使用nameof來獲取成員變數的名稱,上面會輸出:"nameOfAuthor"。