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

  • 相关阅读:
    疫情控制
    严格次小生成树
    图论之最短路
    A Simple Framework for Contrastive Learning of Visual Representations 阅读笔记
    CenterNet文献调研记录
    朴素贝叶斯分类器基本代码 && n折交叉优化 2
    朴素贝叶斯分类器基本代码 && n折交叉优化
    蓝桥杯刷题 -- 第八届蓝桥杯
    蓝桥杯刷题 -- 第七届蓝桥杯
    蓝桥杯刷题 -- 第六届蓝桥杯
  • 原文地址:https://www.cnblogs.com/rangeon/p/6840397.html
Copyright © 2011-2022 走看看