设为首页 加入收藏

TOP

C# 7.1先睹为快(第二部分)
2017-06-18 10:22:07 】 浏览:9329
Tags:7.1 先睹为快 第二部分

推导元组名(Infer Tuple Names)


虽然开发人员不常考虑到,但是C#中的匿名类型包括了命名推导。例如,编写如下代码时,对象y将具有名为A和B的属性:


根据“推导元组名建议”,值元组基本具有同样的功能。


但是匿名类型和值元组间存在着一些显著的差异:


C#和VB间有hen一个有意思的差别,VB可以通过函数去推导匿名属性名。例如:


该功能特性将扩展适用于VB元组。


但如果恰巧有一个扩展方法使用了与推导属性一样的名字,这一特性就会引发破坏性更改。在建议中进一步提出:


考虑泛型约束的元组名


如果存在元组名不匹配的问题,那么编译器会尽量警告编程人员。例如:


如果开始采用泛型约束,代码就不工作了:


当给出前的解释是,在泛型约束的条件下,编译器是不会去检查元组名的。理论上讲,编译器是可以捕获这类问题的,但是所付出的性能上的代价要远高于所得到的收益。


使用泛型的模式匹配


模式匹配是C# 7.0中新提供的特性。但是使用该特性时,存在设计上的缺陷。让我们看一下Alex Wiese给出的如下代码:


代码会报如下错误:“An expression of type T cannot be handled by a pattern of type KeepalivePacket.”。但如果我们将参数改为System.Object类型,而不是T类型,代码就工作正常了。


C# 7.1,通过对引发模式匹配的规则进行微调,修正了这一问题。


我们改进了“模式匹配技术规范”中的一段内容,下面以粗体标出了我们所建议添加的内容:


这被认为是一个软件问题修复问题。由于该更新是“向前不兼容”的,因此只有将编译器设为C# 7.1,才能使用这一更新。


查看英文原文: An Early Look at C# 7.1: Part 2


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java并发编程--synchronized 下一篇Slack使用React重写Web客户端

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目