码迷,mamicode.com
首页 > Windows程序 > 详细

在C# 6中实践模式匹配

时间:2015-04-06 00:49:21      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

模式匹配(Pattern Matching)是F#中非常好用的一种语言特性。估计很多人都希望在C#中能用到这样的特性。

一句话解释一下模式匹配就是:创建一个函数可以接受和处理不同类型的表达式(包括不同参数及类型)。比如你写了一个名为format的函数,可以处理表达式“x?(1+2)”中的变量、常量、加法和乘法。

Tomas Petricek在他的博文《Pattern matching in action using C# 6》中先抱怨了一下C#在这方面特性的不足,接着还推测了一下C# 6虽然提供了模式匹配的能力,但是微软要藏着捏着不给大家用。

当然,他除了抱怨外,也给大家介绍了在C#和C#中实现模型匹配的方法。

由于C#是类型化的编程语言,无法编写可区分联合类型(discriminated union type)。有趣的是F#其实是把异常看作一种可区分联合类型的,反过来我们也可以用C#的异常来实现模型匹配,即:把表达式作为Exception类型的参数,然后throw这个表达式,然后利用catch来匹配表达式。

基于这种思想,C#就可以实现类似模式匹配的功能来对这个数学表达式“x?(1+2)”进行计算。

如果利用C#的异常过滤器(exception filters)新特性,更容易实现通过模式匹配来对数学表达式进行计算。(Tomas说微软藏着捏着就是指异常过滤器其实就是一种模式匹配)

原文地址:http://tomasp.net/blog/2015/csharp-pattern-matching/index.html

在C# 6中实践模式匹配

标签:

原文地址:http://www.cnblogs.com/redmoon/p/4395021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!