写点什么

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

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

关注

评论 1 条评论

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

低代码“日程编辑”全功能拆解,新手速藏!

引迈信息

数字孪生 + 碳痕追踪:MyEMS 给能源管理装了套 “全链路全景导航”

开源能源管理系统

开源 能源管理系统

顾客复购率低?跨境电商需要长效增长!

Wolink

跨境贸易 出海企业 海外推广 沃链Wolink 达人营销

案卷高质量生成:烟草行政处罚案卷制作平台助推效率质量全面提升

中烟创新

原生 APP 的开发框架

北京木奇科技有限公司

APP开发 软件外包公司 APP外包公司

生成式强化学习在广告自动出价场景的技术实践

快手技术

我用Zulu写了一款塔防游戏给弟弟当生日礼物

Comate编码助手

AI辅助编程 AI 编程 文心快码 文心快码Zulu

到底什么是“研发效能”?

思码逸研发效能

研发效能 研发效能度量 研发效能管理 思码逸

撕开厂商锁定黑箱:MyEMS 如何用开源代码夺回能源管理的 “自主控制权”?

开源能源管理系统

开源 能源管理系统

KaiwuDB X 江西电建:共建高性能数据中台,驱动新能源数字化运营

KaiwuDB

数据库 客户案例

spirv 进阶 inline 函数

Miracle

spirv 开端

Miracle

​新一代边缘全栈开发平台!EdgeOne Pages 全面升级,加速 AI 开发部署

极客天地

告别 Excel 熬夜:LazyLLM 框架教你轻松构建自动化财报分析 Agent

鸽芷咕

AI agent LazyLLM

缺少的一环 中间表达式

Miracle

一文看懂Playwright MCP如何引爆AI智能体爆发

测试人

人工智能 软件测试

2025-09-24 - 今日热门信息 - jobleap4u.com

Y11

面试 求职 找工作 招聘 笔试

英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报

声网

破局 “节能不省钱” 悖论:开源 EMS 生态如何让中小企业用 1/3 成本实现能效跃升?

开源能源管理系统

开源 能源管理系统

企业服务管理是做什么的?-ManageEngine卓豪

ServiceDesk_Plus

ManageEngine卓豪

函数 到 AST

Miracle

研发效能提升为何这么难?

思码逸研发效能

研发效能 研发效能度量 研发效能管理

大数据-105 Spark GraphX 入门详解:分布式图计算框架全面解析 架构、算法与应用场景

武子康

Java 大数据 flink spark 分布式

昇腾掀起的“超节点”浪潮,正在改写算力产业的游戏规则

Alter

华为 AI 超节点

BOE(京东方)携手UNESCO联合主办WCBR“科学十年”分会 彰显中国科技企业可持续发展实力

爱极客侠

多语言采集淘宝商品详情数据,淘宝API(json数据返回)

tbapi

淘宝商品数据接口 淘宝API 淘宝商品数据采集 淘宝商品详情API

拍宝拍卖多开小程序系统:全平台适配与定制化解决方案

微擎应用市场

长三角游戏出海新坐标:点点数据论坛分享硬核洞察,助力企业抢滩全球市场

极客天地

舆情监测无国界,赢得海外市场的关键:社交媒体监控

沃观Wovision

跨境贸易 社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

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