写点什么

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:393661
用户头像

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

关注

评论 1 条评论

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

TiDB 社区第四届专栏征文大赛联合墨天轮火热开启,TiDB 业务场景实战、运维开发攻略两大赛道,BOSE 降噪耳机、大疆手持云台、投影仪、运动手环、礼品卡等重磅礼品等你来拿!

TiDB 社区干货传送门

社区活动

CommunityOverCode Asia 2025 Messaging 专题预告,RocketMQ 邀您共探相关议题

Apache RocketMQ

开源 云原生 消息队列 Asia

低代码平台:从热潮到现实,如何破解复杂企业应用难题?

中烟创新

数智先锋 | Bonree ONE助力国金证券构建数智一体化可观测平台

博睿数据

中烟创新全系产品接入DeepSeek,数智化应用场景进入深度推理时代

中烟创新

Murus Pro for mac(网络安全防火墙工具)

晨光熹微

官宣|矩阵起源官网「体验中心」正式上线,文档解析能力开放试用!

MatrixOrigin

在AI技术唾手可得的时代,挖掘真实需求才是核心竞争力

qife122

开发者工具 AI助手

什么是等保一体机?

等保测评

Python语言——万数据插入测试

KaiwuDB

数据库

Wolfram Mathematica for Mac(高级数学及符号运算软件)

晨光熹微

从 Python 演进探寻 AI 与云对编程语言的推动

阿里巴巴云原生

Python 阿里云 云原生

MyEMS开源能源管理系统核心代码解读014

开源能源管理系统

开源 能源管理系统

ColorWell for Mac(调色板软件)

晨光熹微

中烟创新为千行百业客户免费部署DeepSeek,让AI应用遍地开花

中烟创新

ICML 2025 高分论文!快手&南开提出:模块化双工注意力机制,显著提升多模态大模型情感理解能力!

快手技术

多模态 快手 情感理解

数据智能化管理技术创新|PingCAP 合作论文入选 SIGMOD 2025,引领下一代数据基础设施发展方向

TiDB 社区干货传送门

AI赋能灯塔低代码平台,AI应用落地“加速器”

中烟创新

体验KWDB及其测试组件kwdb-tsbs

KaiwuDB

数据库

Studio One 7 Pro for mac(音乐创作编辑软件)

晨光熹微

MyEMS开源能源管理系统核心代码解读013

开源能源管理系统

开源 能源管理系统

揭秘字节跳动内部流量调度与容灾实践【下】

火山引擎边缘云

流量 DNS 调度 调度任务 流量路由

Try Hack Me SOAR 实战演练:安全编排、自动化与响应技术解析

qife122

安全运维 蓝队

等保测评常见的安全产品

等保测评

夏日,户外LED显示屏如何降温?

Dylan

广告 LED LED display 户外LED显示屏 LED屏幕

ISO 50004 标准深度解读:赋能企业能源管理升级的实用指南​

开源能源管理系统

开源 能源管理系统

深度解析 DApp 开发:从技术架构到商业落地的全链路解决

区块链软件开发推广运营

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

成功的DApp经济模型中治理代币与功能代币的协同机制解析

区块链软件开发推广运营

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

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