AICon全球人工智能与机器学习技术大会9折特惠中,点击立减¥480>> 了解详情
写点什么

C# 7 去掉了高级模式匹配特性

2016 年 5 月 30 日

最初有望在 C# 7 中出现的高级模式匹配特性已于近日从future分支中排除出去,放入了该语言的下一个版本中。

Roslyn 的 GitHub 库已经明确了 C# 7 模式匹配的变化范围。尤其是问题#10866 (“将 features/patterns分支分成两个包含 / 不包含在 C# 7 中的子特性分支”)和 PR #10888 (“去掉高级模式匹配特性的证据”)详尽地描述了这一变化的内容。

正如 InfoQ 几周之前的报道,模式匹配会成为 C# 7 中最吸引人的新特性,对有 F#或 Haskell 背景的程序员而言尤其如此。具体地,新模式匹配特性预计提供如下功能:

  • 增强case块,允许基于类型或变量范围切换代码执行路径,例如case int x:case int x when x > 0
  • 支持“分解(destructuring)”,当满足指定条件时,允许开发人员将一个对象分拆成它自身的部分组件,并创建局部变量引用那些组件。语法if(person is Professor {Subject is var s, FirstName is "Scott"})提供了这方面的一个例子。

那么,按照 Roslyn 问题#10866 的描述,用于一些基本模式形式的语法“表达式 is 类型标识符”和“case 模式 when 表达式”已经移到了future分支,它们会包含在 C# 7 中。相反地,其他特性会留在patterns/features分支中,这个分支里的特性“可能在以后的版本中提供”。

就是说,那些更高级的模式匹配特性将不会出现在 C# 7 中。Reddit 用户 wreckedadvent 发了一个帖子,有效地解释了那些特性:

  • 递归模式形式,比如位置模式(比如p is Person("Mickey",*))、属性模式(比如p is Person {FirstName is "Mickey"})、元组模式、通配符*,等等;
  • let关键字定义不可变变量(比如let x = e2 when e2 else stmt;),而不是可变var
  • match允许开发人员编写下面这样的代码:
复制代码
var result = ...
let message = result match (
case Success<string> success: success.Result
case Failure err: err.Message
case *: "Unknown!"
);
  • 基于用户定义代码的模式匹配,比如一个用户定义的is操作符。

这在 C#开发者社区里引发了一些反响。一方面,那些更热衷于函数式编程的开发者表示,缺少一个让C#更加函数化的特性相对而言是一种欺骗。另一方面,其他开发人员表示,他们不关心或者很高兴C#的演化受到了严格的控制。

查看英文原文 Advanced Pattern Matching Features Removed From C# 7

2016 年 5 月 30 日 19:002058
用户头像

发布了 1008 篇内容, 共 324.1 次阅读, 收获喜欢 296 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块3作业-架构设计文档

En wei

架构实战营

GreenPlum资源管理

数据社

greenplum 5月日更

去中心化、P2P、NAT浅析

IT酷盖

音视频 WebRTC 去中心化

Gartner 2021年主要战略技术趋势

车骑

组织转型 行业资讯 数字化 技术趋势 后新冠

天时地利人和—一个传奇操作系统的诞生记

兆熊

unix 历史

烂大街的Spring循环依赖该如何回答?

互联网架构师小马

☕JVM技术之旅-带你认识GC回收的原理

李浩宇/Alex

Java JVM GC GC Root 5月日更

CPU战争40年,终于把Intel打趴下了

Java架构师迁哥

【LeetCode】搜索二维矩阵Java题解

HQ数字卡

算法 LeetCode 5月日更

字节一二三面,面经(已经OC)四月底真实面试经历!

Java大蜗牛

Java 程序员 面试 算法 后端开发

数字经济如何推动制造业高质量发展

CECBC区块链专委会

架构实战营-模块3学习分享

En wei

架构实战营

Java开发项目模板16步快速搭建,拒绝重复性工作!

北游学Java

Java 项目 模板

出游时,请继续戴好口罩

石云升

新冠疫苗 5月日更

大米“绑上”区块链,江苏为农产品上“身份证”

CECBC区块链专委会

Boss直聘超90W次转发的Java面试题库!已超神

Java架构师迁哥

深入理解spring框架之事务管理

邱学喆

mysql事务 spring事务管理 TransactionInterceptor Savepoint 事务传播行为

音视频编解码流程与如何使用FFMPEG命令进行音视频处理

张音乐

音视频 ffmpeg

【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!

牧小农

JVM;

别再纠结“性能优化方案有哪些”了

追谏

面试 前端

什么是线程安全?并发问题的源头

Geek_571bdf

Java 并发编程 线程安全

常量之所想

顿晓

常量 5月日更

SpringBoot-技术专题-教你使用Cache缓存组件

李浩宇/Alex

spring springboot cache 5月日更

Dubbo 动态配置中心

青年IT男

dubbo

不可忽视的Dubbo线程池

互联网架构师小马

EOKEX交易所系统开发方案丨EOKEX交易所源码平台

系统开发咨询1357O98O718

新人小白福利!五一假期怒肝一天整理Java类,不简单不全你打我

牛哄哄的java大师

Java

微信朋友圈的高性能复杂度

王华

架构实战营

MySQL-技术专题-主从复制

李浩宇/Alex

MySQL MySQL 高可用 高可用架构 5月日更

休息一下

IT蜗壳-Tango

5月日更

【LeetCode】删除并获得点数Java题解

HQ数字卡

算法 LeetCode 5月日更

C# 7去掉了高级模式匹配特性-InfoQ