写点什么

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

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

关注

评论 1 条评论

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

Shell的数组表示

芯动大师

Shell 三周年连更 shell数组

应用数据加密技术概述

穿过生命散发芬芳

数据加密 三周年连更

DevData Talks | 思码逸陆春蕊:研发效能度量落地的难点与计策

思码逸研发效能

研发效能

和写作谈谈感觉,你也许可以这样做。

叶小鍵

百度AI,和“吴文俊奖”同行的十二年、千丈山、万里路

脑极体

百度 吴文俊奖

Linux中最低调、最易让人忽视的tmp目录,原来用处那么大!

wljslmz

Linux 三周年连更

轻量级云原生大数据平台"CloudEon"正式开源

CloudEon开源

大数据 云原生 服务 解决方案 组件

All in AI,现在开始算不算太晚?

Baihai IDP

人工智能 AI 企业号 5 月 PK 榜 人工智能浪潮

八股MQ006——Message之旅

Codyida

后端、

ChatGPT不断升级,给互联网行业甚至计算机行业带来哪些挑战和机遇呢? | 社区征文

迷彩

人工智能 AI 笔记分享 三周年征文 三周年连更

从0到1,十分钟搭建一个微服务集群,集群由一个rpc网关和多个微服务组成

vison

微服务 gRPC Go 语言 gin 代码自动生成

2023-05-07:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 由一组上、下、左、右四个方向相

福大大架构师每日一题

Go 算法 rust 福大大

学生管理系统毕设作业

kylexy_0817

架构实战营

Flink数据流介绍

阿泽🧸

flink 三周年连更

初学者如何系统性地学习Linux?

海拥(haiyong.site)

三周年连更

为什么老有人想让我们“程序员”失业? | 社区征文

坚果

三周年征文

浪潮信息 KOS 助力企业核心业务完成 CentOS 迁移替换,性能提升 10%|龙蜥案例

OpenAnolis小助手

操作系统 开源社区 CentOS迁移 浪潮信息 龙蜥案例

文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题

福大大架构师每日一题

福大大 ChatGPT 文心一言

试用「ChatGPT」几周之后

人工智能 ChatGPT

Android App开发超实用实例 | ​Broadcast

TiAmo

broadcast broadcastreceiver Android APP

索引合并,能不用就不要用吧!

江南一点雨

MySQL

运动健康app(一)

鸿蒙之旅

OpenHarmony 三周年连更

kafka高性能设计之内存池

Java你猿哥

Java kafka ssm 架构师 内存池

Spring Data JPA:轻松实现数据持久化

Java你猿哥

Java spring ssm spring data

1行代码,自动群发!人人可用的微信机器人

程序员晚枫

Python 微信 机器人

Mac 配置ChatGLM-6B环境

IT蜗壳-Tango

三周年连更

Kubernetes数据持久化管理

乌龟哥哥

三周年连更

另一个CI/CD构建工具

weichenqi

DevOps 云原生 运维平台

全网好评!程序员面试必备的Java八股文,适合所有的Java求职者!

Java你猿哥

Java Spring Boot 多线程 java基础 Java八股文

耗时15天,我把“大厂面试指南”进行了重新梳理,V2.0版已上线

Java你猿哥

Java 数据库 计算机 java面试 java基础

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