1. 程式人生 > >C# 6.0/7.0 的新特性

C# 6.0/7.0 的新特性

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 的新特性