转眼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 的新特性的更多相关文章

  1. Jdk5.0中出现的新特性

    掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...

  2. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  3. Android 5.0(棒棒糖))十大新特性

    Android 5.0(棒棒糖))十大新特性 1. 全新Material Design设计风格 Android Lollipop全新的设计语言是受到了多种因素影响,是一种大胆的平面化创新.换句话说,谷 ...

  4. Android 7.0(牛轧糖)新特性

    Android 7.0(牛轧糖)新特性 谷歌正式在I/O大会现场详细介绍了有关Android 7.0的大量信息.目前,我们已经知道,新一代Android操作系统将支持无缝升级,能够通过Vulkan A ...

  5. Angular4.0.0正式发布,附新特性及升级指南

    本文首发地址:Angular4.0.0正式发布,附新特性及升级指南 作者|孙薇 编辑|尾尾 经历了6个RC版本之后,Angular项目组终于发布了新版,即正式版 Angular 4.0.0.新版的 A ...

  6. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...

  7. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  8. VS2015 C#6.0 中的那些新特性(转载)

    自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...

  9. php7.0 和 php7.1新特性

    PHP7.1 新特性 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为 ...

  10. Mysql8.0.11简介,新特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

随机推荐

  1. win10下同时安装jdk1.7,1.8

    摘要:在开发不同项目时,可能会用到不同的jdk,需要我们在不同的jdk之间切换,怎么样在同一电脑上装不同的jdk,以此总结 1.正常安装jdk1.7,1.8     显示安装了jdk1.7,再安装jd ...

  2. TP5.1:将外部资源引入到框架中(css/js/font文件)

    为了让我们的框架形式变得更加好看,我们需要加入Bootstrap和Jq文件到框架中 1.通过Bootstrap和jq官网进行相关文件的下载 (1)Bootstrap下载地址:https://v3.bo ...

  3. hdu-1247 Hat’s Words---字典树模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1247 题目大意: 给出一些单词,以EOF结束,看其中哪一个单词可以由其他两个单词组成,将其输出 解题 ...

  4. POJ-1840 Eqs---二分

    题目链接: https://vjudge.net/problem/POJ-1840 题目大意: 给出一个5元3次方程,输入其5个系数,求它的解的个数 其中系数 ai∈[-50,50]  自变量xi∈[ ...

  5. 轻量级HTTP服务器Nginx(Nginx性能优化技巧)

    轻量级HTTP服务器Nginx(Nginx性能优化技巧)   文章来源于南非蚂蚁   一.编译安装过程优化 1.减小Nginx编译后的文件大小在编译Nginx时,默认以debug模式进行,而在debu ...

  6. Netbackup-Oracle数据库恢复演练(上)

    目录 第一章NBU实施内容 1 第二章 环境准备 1 2.1添加LICENSE: 1 2.2安装配置NBU客户端(linux,unix相同) 2 2.3配置并验证oracle备份脚本 3 2.4添加备 ...

  7. Compass Card Sales(模拟)

    Compass Card Sales 时间限制: 3 Sec  内存限制: 128 MB提交: 35  解决: 13[提交] [状态] [讨论版] [命题人:admin] 题目描述 Katla has ...

  8. 文本编辑器Vim技巧

    1.  导入文件内容  :r  文件名 2.  插入当前日期  :r  !date 3. :!which ls 4. :r !命令

  9. ubuntu安装jdk6

    我的ubuntu版本是12.04的64位的.由于ubuntu官方没有更新最新版的jdk6,所以我们只能主动去oracle公司网站去下载.网站地址:http://www.oracle.com/techn ...

  10. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...