C# 6 的新特性~
Mads Torgersen,微软 C# 程序管理者,它发布了一个视频,描述即将到来的下一个 C# 版本——C# 6。在 C# 6 的新特性之间,Mads 主要提到了 getter-only 属性,拉姆达箭头操作符,字符串插值(string interpolation) 等等。
首先,Mads 说,C# 6 不会改版 C# 的设计哲学,并且将提供很多小得特性,来帮助整洁代码。
Getter-only 自动属性
C# 6 允许定义不变的自动化属性,例如,只支持一个 getter 方法的自动化属性:
public class Point
{
public int X { get; }
public int Y { get; }
public int ReadWrite { get; set; }
}
Getter-only 自动化属性是只读的,可以通过构造函数来赋值。
这个没太明白,C# 6 之前的版本也有这个特性啊~
String 操作
字符串插值传统的C#语法按 Mads 描述为“一种混乱且容易出错”:
return String.Format("({0}, {1})", X, Y);
C# 6 将引入一个新的字符串插语法:
return "(\{X}, \{Y})";
单方法表达式的 Lamba 箭头操作符(Lamba-arrow operator)
新的 lambda 箭头操作符将简化返回一个单独表达式值的方法定义:
public override string ToString() => "(\{X}, \{Y})";
public double Dist => Sqrt(X * X + Y * Y);
按照 Mads 的说法,这将帮助减少大量“样板式”代码的键入。
Index 初始化器
在现在的 C# 中,index 设置器必须用一个单独的语句赋值:
var result = new JObject();
result["x"] = X;
result["y"] = Y;
在 C# 6,可能用一个表达式来初始化对象:
var result = new JObject() { ["x"] = X, ["y"] = Y };
这将导致一个高简洁和可读性好的 ToJSon
方法的定义:
public JObject ToJson() => new JObject() { ["x"] = X, ["y"] = Y };
Null 传播操作符(Null-propagating operators)
Null 条件操作符是一个新特性,旨在检查 null 值。因此,不是下面那样检查:
if (json != null &&
json["x"] != null &&
json["x"].Type == JTokenType.Integer)
C# 6 运行使用一个新的 ? 操作符,将计算紧跟着它表达式的一部分,只要它应用在一个非null对象,上述表达式就可以缩小到:
if (json?["x"]?.Type == JTokenType.Integer)
上面这几个特性,微软显然吸收了开源社区的做法,比如,Groovy,让代码变得更加简洁~
异常过滤(Exception filtering)
异常过滤运行捕获表达式,只要符合一个特定条件:
try
{ }
catch (ConfigurationException e) if (e.IsSevere)
{ }
Mads 说,这是一个更好的 catch-rethrow 语法,因为,以前,当重新抛出异常时,异常最初发生的地方将会丢失。
catch 和 finally 块中的 Await
最后,在 catch 和 finally 块中可以使用 await,这增加了在错误处理的灵活性。Mads 补充说,该特性被排除在 C# 6 之前的版本,因为,这个特性如何实现,那时还不明确。
try
{ }
catch (ConfigurationException e)
{
await LogAsync();
}
finally
{
await CloseAync();
}
最近发布的Xamarin.Studio 5.9增加了 C# 6 支持,改进了 Sketches,并带来了新的调试器查看器及其它一些更新。C# 6 将在 Visual Studio 2015 中正式发布,并只在社区版本中提供。尽管如此,Xamarin.Studio 也已经支持 C# 6 的新特性。
C# 6 的新特性~的更多相关文章
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- [干货来袭]C#6.0新特性
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
- CSS3新特性应用之结构与布局
一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
- 跨平台的 .NET 运行环境 Mono 3.2 新特性
Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...
- Atitit opencv版本新特性attilax总结
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
- es6 新特性2
es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...
- ES6 新特性
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...
- 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...
随机推荐
- cf343c 二分答案+模拟
/* 怎么判断能否在时间k内完成扫描 贪心:每次取出最靠左边的磁头去扫描最左边的,然后再往右扫描即可 如果当前点无法扫到最左侧点,那么后继点一样无法扫到 */ #include<bits/std ...
- hdu3642扫描线 长方体
立方体交,自己写的莫名其妙MLE了,不知道为什么 #include<iostream> #include<cstring> #include<cstdio> #in ...
- js计时器 setInterval与clearInterval
var timer = setInterval(函数, 毫秒数) 功能:每隔对应的毫秒数执行一次函数. 返回值:系统没启动一个定时器,就会给一个标识,返回值就是这个定时器的编号. clearInter ...
- 向集合中添加Person类型并对其排序
package com.bjpowernode.t03sort; import java.util.ArrayList;import java.util.Collections; /* * 向集合中添 ...
- 2018-2019-2 20165333 《网络对抗技术》 Exp5:MSF基础应用
2018-2019-2 20165333 <网络对抗技术> Exp5:MSF基础应用 实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路 ...
- ERP商品类型管理相关业务处理(三十五)
根据类型编号获取父类名称 -- ============================================= CREATE FUNCTION [dbo].[FN_getParentTyp ...
- [转] iOS开发工具——网络封包分析工具Charles
简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Charles通过将自己设置成系统的网络访问代理服务器,使 ...
- usaco 校园网
题解: 显然当一个图上的点是一个环时能满足题目要求 那么我们来考虑怎么形成一个环 很显然的是要先缩点 缩完点就成为了森林,如何让森林成环呢? 考虑一下环上的点的入度出度一定都大于1 而连一条边可以增加 ...
- 异常Cannot get a text value from a numeric cell
POI操作Excel时偶尔会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类 ...
- Scrapy爬虫学习笔记 - windows \ linux下搭建开发环境2
四.虚拟环境的安装和配置 virtualenv可以搭建虚拟且独立的python运行环境, 使得单个项目的运行环境与其它项目独立起来. virtualenv本质上是个python包 虚拟环境可以将开发环 ...