BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

C# 6预览

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 曹知渊 关注 1 他的粉丝 发布于 2014年11月22日. 估计阅读时间: 5 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

WoW~ by Lee Jerin

WoW~

似乎都是不需要修改JIT的语法糖 by 杨 历

?.这个语法糖我喜欢。其他的看不出实际用途,为此添加新语法是否值得?尤其是字符串插值语法,感觉乱乱的。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT