自动属性初始化 (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#越做越好!

VS2015 C#6.0 中的那些新特性(转自http://www.cnblogs.com/henryzhu/p/new-feature-in-csharp-6.html)的更多相关文章

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

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

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

    本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/66.html. 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok ...

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

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

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

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

  5. C# 9.0中引入的新特性init和record的使用思考

    写在前面 .NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过 ...

  6. C#6.0中10大新特性的应用和总结

    微软发布C#6.0.VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家.   微软于2015年7月21日发布了Visual Studio 20 ...

  7. Android3.0中ActionBar的新特性

    1. ActionBar(活动栏)替代了显示在屏幕顶端的标题栏.主要负责显示菜单,widget,导航等功能,主要包括:@  显示选项菜单中的菜单项到活动栏:@  添加可交互的视图到活动栏作为活动视图: ...

  8. VS2015 C#6.0 中的没有实现/支持的特性

      VS2015 C#6.0 中的没有实现/支持的特性   .数组增强:赋值 维数组 Int[] numbers: numbers = {2,3,4,5}; 维数组 Int[,] numbers2; ...

  9. iOS中的项目新特性页面的处理

    一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...

随机推荐

  1. BindVertexbuffer

    stride 的意思是 inputstream.layout 的大小 比如 description是 pos uv normal stride 就是一组pos uv normal的大小 ns  里面 ...

  2. cubemap

    cubemap 画的时候 是一张一张画 并不是画成 ------- |       | |       |        |       |       | |        | 这样一个位置 而是一 ...

  3. EL表达式中的empty运算符

  4. Java反射学习总结五(Annotation(注解)-基础篇)

    Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...

  5. android Broadcast 总结

    1, 生命周期 在android官方文档中,推荐我们在onResume中进行 registerReceiver, 在onPause中进行unRegisterReceiver. 他们给出的理由是: If ...

  6. 阿里云ECS服务器IIS和WampServer同时运行

    网上下载WampServer安装包 安装完成之后默认的端口是80 但是由于此端口被IIS占用了 点击WampServer的图标->Apache->Service->测试80端口 出现 ...

  7. 转: 阿里跨平台移动开发工具Weex

    对于移动开发者来说,Weex主要解决了频繁发版和多端研发两大痛点,同时解决了前端语言性能差和显示效果受限的问题.开发者可通过Weex官网申请内测.(http://alibaba.github.io/w ...

  8. 转:100.64. 开头IP地址问题

    100.64. 开头IP地址问题 姚洪楼 发表于 学习备忘录 分类,标签: 电信 08二月2015 0 之前调试过一个路由器在成功设置DDNS的情况下外网依旧无法访问的情况,当时没有多想什么,一直以为 ...

  9. Kwickserver

    Kwickserver 欢迎来到Kwickserver的主页 Kwickserver是什么? Kwickserver是一个易于安装的和易于使用的服务器应用程序,从CD安装在PC兼容的硬件和坚持webi ...

  10. Javascript 客户端实时显示服务器时间

    <!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...