C# 6.0/7.0 的新特性
阿新 • • 發佈:2017-05-11
const con use 新特性 小夥伴 必須 switch 寫法 相同
轉眼C#語言都已經叠代到7.0版本了,很多小夥伴都已經把C# 7.0 的新特性應用到代碼中了,想想自己連6.0的新特性都還很少使用,今天特意搜集了一下6.0和7.0的一些新特性,記錄一下,方便查閱。
C# 7.0 新特性
- 增強的ref
- 可以對值變量傳遞引用 ref int b = ref a;
- 可以對返回值返回引用 return ref x;
- 自動創建 out 變量
- 增強的元組(需要擴展包支持,Install-Package System.ValueTuple)
- 命名返回值 (int a, int b) GetValue() => (1, 2);
- 屬性式取值 var data = GetValue();(使用data.a、data.b訪問)
- 直接式取值 (int a, int b) = GetValue();(直接用a、b訪問)
- 增強的is
- 類型正確直接賦值 a is int b
- 類型選擇語句 switch (a) case int b: ... case string c: ...
- 增強的類型選擇語句 case int b when b < 0: ...
- 局部函數(在函數體中定義一個小函數,只能函數體中訪問)
- 增強的函數表達式
- 支持析構函數 => 單條調用或賦值語句
- 屬性表達式 get => 變量; 或 set => 變量=value ?? "默認值";
- 增強的null異常處理(支持 ?? throw new Exception(message);)
- 增強的異步返回類型(ValueTask<T>,需要擴展包支持,Install-Package System.Threading.Tasks.Extensions)
- 增強的字面值寫法(int a = 123_456; int b = 0xAB_CD_EF; 與不帶下劃線的值相同)
- 解構函數Deconstruct,類似元組的調用方法
C# 6.0 新特性
- 增強的屬性表達式
- 只讀屬性 public int a => 100;
- 屬性默認值 public int c { get; set; } = 100;
- 只讀屬性和readonly字段支持在構造函數中賦值
- 函數表達式,public int add(int a, int b) => a + b;
- NULL檢查運算符
- int? age = list?.FirstOrDefault()?.Age; 非空才進行後續操作(age必須是可空類型)
- int? age = users?[0].Age; 非空才進行索引操作(age必須是可空類型)
- nameof表達式,獲取變量、函數、類的名稱
- 增強的異常處理
- catch和finally語句塊中支持await
- catch支持條件表達式,catch (Exception e) if (e.XXX == xxx)
- 字符串嵌入值,var user = $"{Name} {Age}"
- 支持using靜態類,然後直接使用類中的方法
- 帶索引的對象初始化器:new Dictionary<string, int> { ["a"] = 1, ["b"] = 1, };
- 支持無參數的結構體構造函數(註意,只有通過new得到的結構體才會調用構造函數)
PS. 參考了很多園子裏大神的文章,感謝分享!
C# 6.0/7.0 的新特性