泛型約束更強大。比如支持有參構造函數、枚舉、委托: void Foo<T>() where T : new(string, int), enum, delegate 空值判斷符允許對屬性/欄位賦值: obj?.Name = "sdf"; //obj為null則什麼也不做 索引器支持泛型: publi
- 泛型約束更強大。比如支持有參構造函數、枚舉、委托:
void Foo<T>() where T : new(string, int), enum, delegate
- 空值判斷符允許對屬性/欄位賦值:
obj?.Name = "sdf"; //obj為null則什麼也不做
- 索引器支持泛型:
public T this<T>[int i] { get { return (T)arr[i]; } set { arr[i] = value; } }
- 支持將var作為參數類型,代表匿名類型,這樣方法就可以返回匿名類型,完了同樣用var接住返回值,並可以智能提示返回對象的屬性,這就要求方法中每個return的匿名類型要一致。目前可以用dynamic代替,但就沒了智能提示:
public static var Create<T1, T2>(T1 arg1, T2 arg2) { return new { Item1 = arg1, Item2 = arg2 }; }
- 支持內聯out。這點其實在c#6.0差一點實現,但最終沒如願,我猜原因是在變數作用域上不好處理:
if (int.TryParse("3", out int i)) //結合類型推斷,甚至連int都允許省略 { Use(i); }
- 支持靜態索引器:
public static class Package { static readonly Dictionary<string, int> _dic; static Package() { _dic = new Dictionary<string, int>(3); _dic.Add("a", 0); _dic.Add("b", 1); _dic.Add("c", 2); } public static int this[string name] { get { return _dic[name]; } set { _dic[name] = value; } } } // use example Use(Package["b"]);
- 支持編譯為本機exe/dll,準確說這個是對編譯器的遐想。我倒不是為了性能,而是一為不要運行庫,二為別讓我們的源碼赤裸裸的暴露在.net reflactor之流中。是有個.net native,但僅限商店應用,而且似乎太監了。
暫時就扯這些,有新想法再補上。