写点什么

C# 6 预览

  • 2014-11-21
  • 本文字数:1262 字

    阅读完需:约 4 分钟

Mads Torgersen 是微软的 C#项目经理,他发布了一段简短的视频演讲,描述了将要发布的 C#的下一个大版本 C# 6 将会带来什么。在 C# 6 的新功能中,Mads 着重讲了只读属性(getter-only properties)、lambda 箭头运算符(lambda-arrow operator)、字符插值(string interpolation)以及其他一些内容。

开始时,Mads 说,C# 6 不会改变 C#的设计哲学,主要会提供大量的小功能帮助简化代码。

只读的自动属性(Getter-only auto-properties)

C# 6 允许定义不可变的自动属性(immutable auto-properties),也就是说只支持读方法(getter method)的自动属性:

复制代码
public class Point
{
public int X { get; }
public int Y { get; }
public int ReadWrite { get; set; }
}

只读的自动属性是通过在构造函数中为之分配一个只读的域来实现的。

字符操作

Mads 把 C#传统的字符插值语法描述为“困惑之源,容易出错”:

复制代码
return String.Format("({0}, {1})", X, Y);

以上语法会被一种新的字符插值语法所取代:

复制代码
return "(\{X}, \{Y})";

Lambda 箭头运算符有助于编写返回单个表达式的方法

新的 lambda 箭头运算符能简化那些只返回单个表达式的方法的定义:

复制代码
public override string ToString() => "(\{X}, \{Y})";
public double Dist => Sqrt(X * X + Y * Y);

根据 Mad 的说法,这将减少很多冗余代码的输入。

索引初始化语法

在当前的 C#版本中,要设置某个索引的值,必须要使用单独的语句:

复制代码
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 的条件运算符是一项新功能,旨在把检查空值的操作隐藏起来,所以相比以下的这种检查:

复制代码
if (json != null &&
json["x"] != null &&
json["x"].Type == JTokenType.Integer)

C# 6 允许使用新的?运算符,只有对象非空的时候,跟在它后面的表达式才会被求值。所以上面的表达式可以简化为:

复制代码
if (json?["x"]?.Type == JTokenType.Integer)

异常过滤

异常过滤允许只有在满足某个条件的前提下捕获异常:

复制代码
try
{ }
catch (ConfigurationException e) if (e.IsSevere)
{ }

Mads 说,这种做法比“捕获异常——再次抛出”的做法更好,因为当你再次抛出异常的时候,这个异常最初出现时的信息已经丢失了。

允许在 catch 和 finally 代码块中使用 await

最后,C# 6 允许在 catch 和 finally 代码块中使用 await,这样大大增强了错误处理的灵活性。Mads 评论道,这个功能之所以被之前的 C#版本拒之门外,只是因为还没有想明白如何去实现它。

复制代码
try
{ }
catch (ConfigurationException e)
{
await LogAsync();
}
finally
{
await CloseAync();
}

可以从官方资源中获得更多的C#信息,其中包括了更多细节以及完整的功能列表。

InfoQ 曾经报道过 C# 6 的新功能,比如模式匹配更简单的不可变对象

查看英文原文: A Preview of C# 6

2014-11-21 00:393265
用户头像

发布了 77 篇内容, 共 37.4 次阅读, 收获喜欢 26 次。

关注

评论 1 条评论

发布
用户头像
借博主宝地一用,给大家推荐一个最近很火的接口管理工具apipost,很好用,有时间可以试试
2022-04-13 20:58
回复
没有更多了
发现更多内容

深度解读GaussDB逻辑解码技术原理

华为云开发者联盟

数据库 GaussDB DRS #SQL

OpenHarmony首次亮相欧洲开源会议

科技热闻

区块链开发:DAPP、NFT、DAO、公链与钱包软件

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 代币开发

交易所开发:开启数字金融新时代

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 代币开发

解密虾皮商品详情API接口:获取与运用

科普小能手

API 接口 API 测试 虾皮商品详情接口 虾皮商品详情数据接口 虾皮API接口

VMware Aria Operations for Networks 6.13 发布,新增功能概览

sysin

vmware aria

VMware ESXi 8.0U3 Huawei (华为) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

sysin

华为 huawei esxi OEM unlocker

摊牌了,创业失败了

禅道项目管理

创业 企业管理 决策 战略规划 决策管理

HyperWorks的模型简化

智造软件

软件 教程 Hypermesh

文献解读-Sentieon DNAscope LongRead – A highly Accurate, Fast, and Efficient Pipeline for Germline Variant Calling from PacBio HiFi

INSVAST

基因数据分析 生信服务 长读长测序 Sentieon

史上最全ThreadLocal 详解

EquatorCoco

Java 算法 JVM

一文彻底弄懂spring boot自动转配的过程

不在线第一只蜗牛

Java Spring Boot 后端

华大北斗芯片级产品矩阵亮相第三届北斗规模应用国际峰会

江湖老铁

软件测试学习笔记丨Selenium复用已打开浏览器

测试人

软件测试

多所头部高校教师参加鸿蒙生态学堂·师资培训(贵安站),持续赋能万千开发者

最新动态

深圳!入选北斗规模应用试点城市

江湖老铁

Java EasyExcel 导出报内存溢出如何解决

威哥爱编程

Java EasyExcel JavaEE

CST电磁仿真软件如何计算有源S参数

思茂信息

cst cst使用教程 cst电磁仿真

私有云容灾方案设计浅谈

天翼云开发者社区

云计算 私有云

鸿蒙网络编程系列39-Web组件打印示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

捷行2024Train-the-Trainer微课程系列-用户故事地图实操工作坊

ShineScrum

颠覆性创新,低成本一天内快速上线体育赛事直播平台!

软件开发-梦幻运营部

生成对抗网络GAN简介

天翼云开发者社区

网络 GAN

提升前端开发效率的五种实用技术

天翼云开发者社区

前端开发

2024 必备工具:JProfiler,解锁 Java 应用性能密码

Rose

C# 6预览_.NET_Sergio De Simone_InfoQ精选文章