在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论 1 条评论

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

如何清除 WordPress 中的缓存

海拥(haiyong.site)

WordPress 5月月更

4月月更开奖啦!中奖者速来领取!

InfoQ写作社区官方

热门活动

谁说 Zadig 只能复制环境?数百微服务一套环境实现高效协作

Zadig

DevOps 云原生 CI/CD 软件交付

有趣、实用、全面,是程序员心中理想人工智能教材的样子了

图灵教育

深度学习 PyTorch

无聊科技正经事周刊(第6期):纯粹的程序员与必然的中年危机

潘大壮

程序员 周刊 行业趋势 科技周刊

在字节跳动,一个更好的企业级SparkSQL Server这么做

字节跳动数据平台

我国类脑计算处于什么水平?人工智能下神经科学启发的类脑计算。

GPU算力

人工智能 液冷服务器 类脑计算 神经科学

“四大高手”为你的 Vue 应用程序保驾护航

葡萄城技术团队

动辄“耗资过亿”的表格工具,究竟难在哪儿?

葡萄城技术团队

玩了一场剧本杀,同车队友“不是人”

脑极体

如何开发 LAXCUS 分布式应用软件(三):编写终端软件

LAXCUS分布式操作系统

集群架构 并行计算 端边云 分布式操作系统 分布式应用软件

数据标准在网易的实践

网易数帆

大数据 数据仓库 数据治理 元数据 数据标准

FinClip+微幕小程序,助力企业全端公私域流量互通

Speedoooo

小程序 WordPress 移动开发 小程序容器

英特尔公布数据中心和人工智能领域重大进展,全方位展示强劲领导力

科技新消息

钉钉 Flutter 跨四端方案设计与技术实践 | Dutter

阿里巴巴终端技术

flutter 移动端 跨端框架 桌面端

netty系列之:我有一个可扩展的Enum你要不要看一下?

程序那些事

Java Netty 程序那些事 5月月更

揭秘英特尔未来IPU路线图,开启数据中心“进化之旅”

科技新消息

硬件为矛 软件为盾 英特尔分享数据中心GPU的攻守之道

科技新消息

蝉联第一!金蝶夺取Gartner中国高生产力aPaaS市场冠军!

金蝶云·苍穹

GPU分类和应用现状分析

Finovy Cloud

人工智能 云计算 gpu GPU服务器

直播预告 | PolarDB-X 动手实践系列——PolarDB-X Replica原理和使用

阿里云数据库开源

数据库 阿里云 开源 PolarDB-X

基于 Agora SDK 实现 Windows 端的一对一视频通话(基于3.6.2版本)

RTE开发者社区

人工智能 音视频 sdk

Spring Security

Zhang

Java spring security

Spring Authorization Server 实现授权中心

Zhang

Java OAuth 2.1 Spring Security OAuth

英特尔以四大超级技术力量,助力数字未来,发布多项进展

科技新消息

String源码解析-String的使用注意2

zarmnosaj

5月月更

实现同比、环比计算的N种姿势

葡萄城技术团队

数据分析 BI数据分析 同比 环比

云图说|华为云帮助中心最佳实践:源自项目实战的上云指导

华为云开发者联盟

最佳实践 华为云 云图说 帮助中心 业务上云

墨天轮访谈 | OceanBase 白超:海量数据管理,为什么选择OceanBase?

墨天轮

数据库 oceanbase 国产数据库

echarts饼图指示器文字颜色设置不同

空城机

eCharts 5月月更

如何开发 LAXCUS 分布式应用软件(四):编写边缘端软件

LAXCUS分布式操作系统

并行计算 端边云协同架构 分布式操作系统 分布式应用软件

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