zoukankan      html  css  js  c++  java
  • C# 6.0/7.0 的新特性

    转眼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. 参考了很多园子里大神的文章,感谢分享!

  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/rangeon/p/6840397.html
Copyright © 2011-2022 走看看