自动属性初始化 (Initializers for auto-properties)

以前我们是这么写的

为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写

只读属性的初始化(Getter-only auto-properties)

像用户ID这种只读属性,我们以前是这样写的

现在我们可以这样写

只读属性可以和标了readonly的字段一样在构造函数里面赋值。

用Lambda作为函数体 (Expression bodies on method-like members)

平时总是有一些短小精悍的代码,但我们不得不把他们放到两个括号中,现在我们可以这么写

Lambda表达式用作属性 (Expression bodies on property-like function members)

这种用法同样可以用于属性

字符串嵌入值 (String interpolation)

这个叫法有点怪,看个例子就明白了,上面那个string.Format其实可以这样写,不仅写起来方便,而且可读性也非常好。

如果要用到格式控制,和以前一样加上就可以了。

Using静态类 (Using static)

如果一个静态类里面是一堆方法,比如Math 可以不用写类名,直接调用他的静态方法

有人说这有破坏面向对象的嫌疑,我倒觉得这让C#在函数式编程上更进一步,至于到底是怎样,time will tell.

值得一提的是,这种using 也会引入扩展方法,之前using System.Linq 会把这个命名空间下所有的扩展方法引入,如果只需要一部分 (比如Enumerable),这种用法会很方便。

空值判断 (Null-conditional operators)

这种写法相信有非常多的朋友用过,经常为了一个是否为空的问题搞得代码非常难看,比如视频里的那个

再举个例子,我们要获取一个列表的长度

这种写法真是太恶心了,在C#6.0中,我们可以这样写

从这里也可以看出这种操作符的一个规则:如果对象为空,则整个表达式的值为空。

后面的成员访问不限于方法,还可以是属性,索引器等。

给个实际应用的例子,在触发事件时,经常见到这样的写法,一个委托在调用前总是要判断是否为空

现在我们可以这样

如果PropertyChangednull,那这句就什么也不做。

nameof表达式 (nameof expressions)

在方法参数检查时,经常会见到这样的代码

里面有那个role是我们手写的字符串,在给role改名时,很容易把下面的那个字符串忘掉,C#6.0解决了这个问题,看看新写法

带索引的对象初始化器 (Index initializers)

对象初始化器在C#3.0就已经有了,C#6.0的对象初始化器加入了对索引器的支持,使得字典一类的东西也可以轻松初始化

这是一个Json.NET使用的例子

异常筛选器 (Exception filters)

这个在VB和F#中早就有的功能也加进来了,看看用法

在微软的文档中还给出了另一种用法,这个异常会在日志记录失败时抛给上一层调用者

catch和finally 中的 await (Await in catch and finally blocks)

这是另一个和异常相关的特性,使得我们可以在catch 和finally中等待异步方法,看微软的示例

无参数的结构体构造函数 (Parameterless constructors in structs)

在之前版本的C#中是不允许结构体拥有无参构造函数的,在C#6.0中是允许的,但需要注意一点,通过new得到的结构体会被调用构造函数,而通过default得到的不会调用

看看这个例子

首先是一个结构体,通过两种不同的方式创建,然后输出

不见的功能

Primary constructor和 out参数定义变量那个不见了,有说法是cut掉了,微软真是纠结。。

详情: Changes to the language feature set

总体感觉C#6.0加入的更多是语法糖,语言本身没有太多新的概念,语法糖的加入会让C#程序员写出的代码更优美,更有生产力,希望C#越做越好!

转载自:http://www.cnblogs.com/henryzhu/p/new-feature-in-csharp-6.html

C# 6.0的新变化的更多相关文章

  1. [转]Material Design Library 23.1.0的新变化与代码实战

    Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...

  2. Material Design Library 23.1.0的新变化与代码实战

    Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...

  3. geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍

    目录 前言 变化情况介绍 总结 一.前言        之前版本是0.9或者0.10.1.0.10.2,最近发现更新成为1.0.0-2077839.1.0应该也能称之为正式版了吧.发现其中有很多变化, ...

  4. paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较

    paip.php 5.0 5.3 5.4  5.5 -6.0的新特性总结与比较 PHP5的新特性 2 · 对象的参照过渡是默认的(default) 3 · 引入访问属性的限制 3 · 引入访问方法的限 ...

  5. 相比于python2.6,python3.0的新特性。

    这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...

  6. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  7. 一张图看懂ANSYS17.0 流体 新功能与改进

    一张图看懂ANSYS17.0 流体 新功能与改进   提交 我的留言 加载中 已留言   一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...

  8. php5.3到php7.0.x新特性介绍

    <?php /*php5.3*/ echo '<hr>'; const MYTT = 'aaa'; #print_r(get_defined_constants()); /* 5.4 ...

  9. MiinCMP1.0 SAE 新浪云版公布, 开源企业站点系统

    MiinCMP是一款开源企业站点系统,除可执行于256M左右100元的国内IDC外,JUULUU聚龙软件团队最近开发了面向新浪云的版本号,该版本号可将站点免费布署到新浪云SAE上.MiinCMP採用j ...

随机推荐

  1. Android Studio accelerator key(shortcut)&amp; Basic knowledge

    shift + F6 重构(选文件,ok->下面的控制台,do refactor option + return 快速修复 Activity@Extra() Intent: @FragmentA ...

  2. SQL Server 2008安装过程中的一些问题和心得

    开博客已经好久了,但一直没有用起来,也有很多"老人"劝诫我,好记性不如烂笔头,于是一年后的我重拾博客,打算记录一些我在计算机方面遇到的一些问题和心得. 前几天重装了Win10系统, ...

  3. iOS开发之生成二维码

    一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器   1.二维码的内容(传统的条形码只能放数字) 纯文本 名片 URL   2.生成二 ...

  4. 不用static,巧用对象.方法调用java中的函数

    先生成一个对象,用"对象.方法()"的方式调用. java中的main方法是静态的,用于程序的入口,在静态方法中无法调用非静态方法,只能调用静态方法.想调用静态方法的话就要先生成该 ...

  5. 一句话概括下spring框架及spring cloud框架主要组件

    作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...

  6. mysql explain

    我们使用EXPLAIN解析SQL执行计划时,如果有下面几种情况,就需要特别关注下了: 首先看下 type 这列的结果,如果有类型是 ALL 时,表示预计会进行全表扫描(full table scan) ...

  7. ubuntu安装SCrapy

    依次安装 sudo apt-get install build-essential; sudo apt-get install python-dev; sudo apt-get install lib ...

  8. JDK源码分析之集合03LinkedList

    一.前言 LinkedList是双向列表,实现方式是使用链表的方式保存元素:除了第一个和最后一个元素外,每一个节点都包含一个指向前一个和指向后一个节点的指针和元素的值.其特点是插入删除效率高,而随机访 ...

  9. iOS:UIAlertController和UIAlertAction的详解

    提示框控制器:UIAlertController 提示框按钮:UIAlertAction   功能:用来提示信息,并给出一些可以进行选择的按钮来处理相应的要求.   注意:在Xcode的iOS8 SD ...

  10. Mac OS X 中安装JDK7

    1. 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 当前版本1.7.0_ ...