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

时间: 2024-08-06 20:07:09

C# 6.0/7.0 的新特性的相关文章

VS2015 C#6.0 中的那些新特性

? VS2015 C#6.0 中的那些新特性 前言 ? ? ? VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些参数吧,由于这块之前从未接触过,想了想还是先不把时间继续浪费在这里了,于是乎来体验一下新特性了. 本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/66.html. ? ?本文参考http://roslyn.codeplex.com,

php7.0 和 php7.1新特性

PHP7.1 新特性 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为可为空的. function test(?string $name) { var_dump($name); } 以上例程会输出: string(5) "tpunt" NULL Uncaught Error: Too few arguments to function test(), 0 p

NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N

MySQL 8.0的十大新特性

今天,让我们看一下MySQL8.0提升数据库管理员工作效率的十大改进. 从一大堆特性你们找出十点并不太容易,以下是这十大特性: 1.临时表的改进 2.持续的全局变量 3.取消默认MyISAM系统表 4.UNDO空间回收 5.UTF8性能改进 6.取消Query Cache 7.原子DDL 8.更快.性能更好的Schema和Information Schema 9.角色管理 10.加密表空间中的REDO日志和UNDO日志都将被加密 临时表的改进 在MySQL5.7中,所有的临时表都被创建在一个叫"

Android6.0系统添加那些新特性

??? 北京时间9月30日凌晨在美国旧金山举行2015年秋季新品公布会.在公布会上代号为"Marshmallow(棉花糖)"的安卓6.0系统正式推出.新系统的总体设计风格依旧保持扁平化的MeterialDesign风格. Android6.0在对软件体验与执行性能上进行了大幅度的优化.安卓权限系统被又一次设计了. ??? 全新的Android M相比眼下的Android Lollipop(5.0)有二十项重大的改进: ? ? 原文博客请參考:点击打开链接 ??? 一:App Permi

jdk5.0中出现的新特性

• 泛型(Generics) • 增强的“for”循环(Enhanced For loop) • 自动装箱/自动拆箱(Autoboxing/unboxing) • 类型安全的枚举(Type safe enums) • 静态导入(Static import) • 可变参数(Var args) 1. 所谓泛型:就是变量类型的参数化.通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能. 2. 增强的for循环,For-Each循环的加入简化了集合的遍

SpringBoot2.0不容错过的新特性 WebFlux响应式编程

第1章 课程介绍 课程介绍及导学 第2章 函数式编程和lambda表达式 本章介绍函数式编程的概念,和lambda表达式的基础语法,并分析了惰性求值的应用和实现.最后同意反编译字节码,重点剖析了lambda表达式的底层实现原理 第3章 Stream流编程 本章介绍jdk8里面stream流编程的重要知识点,并剖析流的运行机制和实现原理 第4章 reactive stream 响应式流 本章介绍jdk9的响应式流的开发过程,重点讲解响应式流的4个接口,以及背压的概念和jdk实现背压的关键. 第5章

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

JDBC4.0新特性

在 Java SE 6 所提供的诸多新特性和改进中,值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加便利的代码编写机制及柔性 , 并且支持更多的数据类型 . 在本文中,我们将从编码的易用性及柔性的角度探讨 JDBC 4.0 所带来的新特性及改进. JDBC 4.0 的新特性 JDBC 4.0 文档列举了 20 个改进及新特性 , 大小不等 . 本文无法做到尽述其详 , 为此笔者根据其功能特点及应用领域将其分

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方