【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论 1 条评论

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

我的openEuler社区参与之旅

openEuler

Linux 开源 操作系统 openEuler

两年Java开发经验四面阿里成功拿下P6offer,总结大厂面试的心酸血泪史

Java架构之路

Java 程序员 面试 算法 编程语言

服务器的发展历史

德胜网络-阳

做好微服务架构,并非易事!!

架构师修行之路

微服务

一个草根的日常杂碎(10月7日)

刘新吾

随笔杂谈 生活记录 社会百态

甲方日常 28

句子

工作 随笔杂谈 日常

汇编入门第一篇,小白也能看懂

cxuan

后端 计算机 汇编

【第四周】系统架构

云龙

CPU 执行程序的秘密,藏在了这 15 张图里

Java架构师迁哥

为什么有了SOA,我们还用微服务?

架构师修行之路

微服务

一个草根的日常杂碎(10月8日)

刘新吾

随笔杂谈 生活记录 社会百态

中国银行正式启动区块链产业金融服务项目 ​

CECBC

区块链 金融 金融服务

十一长假我肝了这本超硬核PDF,现决定开源!!

冰河

项目管理 jenkins 互联网工程 持续发布

并发和Read-copy update(RCU)

程序那些事

并发 并发和RCU RCU

读10x程序员有感。

杨鹏Geek

程序员 10X工作法

翻译之深入注释俄罗斯民间故事的语料库,以实现对俄罗斯形式主义理论的机器学习

AI代笔

一个草根的日常杂碎(10月6日)

刘新吾

随笔杂谈 生活记录 社会百态

TensorFlow 篇 | TensorFlow 2.x 模型 Serving 服务

Alex

tensorflow keras tensorflow serving model serving

MySQL-技术专题-MySQL的索引

洛神灬殇

spring-boot-route(十四)整合Kafka

Java旅途

Java kafka Spring Boot

高难度对话读书笔记——聆听篇2

wo是一棵草

个人数字人民币钱包即将亮相

CECBC

央行 数字人民币

Spring 学习笔记(二)Spring中的一些概念

无语

Spring Framework

架构师训练营 1 期第 4 周:系统架构 - 总结

piercebn

极客大学架构师训练营

涂鸦红外物联网设备开箱使用

良知犹存

物联网 测评

终于我用JOL打破了你对java对象的所有想象

程序那些事

JOL java对象分析 对象空间占用 java对象

典型的大型互联网系统使用了哪些技术方案和手段,主要解决什么问题?

极客海

Java 中的Exception 有什么用?

Braisdom

Java Exception

区块链 | 最火的七大职业了解一下

CECBC

区块链技术人才

Kubeless 如何基于 CPU 自动伸缩? | 玩转 Kubeless

donghui

Serverless kubeless

再看传记:试图进入和理解他人的生活

Nydia

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