关于冰盾 | 使用条款 | 网站地图
 
C#6与VB12即将加入模式匹配
C#6与VB12即将加入模式匹配
作者:冰盾防火墙 网站:www.bingdun.com 日期:2014-08-18
 

  又有一种源自于函数式编程语言中的概念加入了 C# 和 VB 的阵营,这就是被称为模式匹配(Pattern Matching)的特性。初看上去,模式匹配的作用类似于一段 switch/select 语句块,但它的功能要强大的多。

  请注意:由于 VB 版本的规格说明现在还没有完成,因此这些示例主要都是来自于 C# 中的模式匹配规格说明

  is 或 Matches 操作符

  .NET 中的模式匹配主要是通过“is/Matches”操作符支持的。这种还让人不太熟悉的操作符将一个类分解为多个组成部分。以下这个示例是基于在周二的新闻报道中所提到过的 Cartesian 记录类(record class)的基础上创建的。

public static bool operator is(Cartesian c, out double x, out double y)     x = c.X;     y = c.Y;     return true; }

  这个 is 操作符不仅限于在它的定义类中使用,以下这个示例以另一种方式定义了一个操作符,使它能够分解一个 Cartesian 对象,让它能够匹配一个 Polar 对象。

public static class Polar  {     public static bool operator is( Cartesian c, out double R, out double Theta)      {         R = Math.Sqrt (c.X*c.X + c.Y*c.Y);         Theta = Math.Atan2(c.Y, c.X);         return c.X != 0 c.Y != 0;    } } var c = Cartesian (3, 4); if (c is Polar (var R, *))    Console.WriteLine (R);

  类型模式

  最简单的模式是类型模式,它本质上就是尝试进行类型转换并同时赋给某个变量。以下是这种模式的一个示例:

if (expr is Type v)    { // code using v } 

  递归模式

  多数模式都是作为递归模式的形式出现,意即它们是由较简单的模式所组成的。看一下这种模式的示例:

var a = new Location (1, 2, 3); //x=1, y=2, z=3 
if (a is Location (1, var y, *)) 

  这个递归模式包括了一个常数模式,一个 var 模式和一个通配符模式。

  常数模式

  这个模式可以将一个属性与一个常数值进行匹配,常数匹配使用 object.Equals (left, right)方法来判断两者是否匹配。

  Var 模式

  Var 模式是一定会匹配成功的,该模式对应的变量将会被赋值为调用该 is 操作符时所提供的值,而该变量的类型则是由该表达式所决定的静态类型。

  通配符模式

  通配符模式本质上来说就是 var 表达式,不过你不需要关心匹配的结果。

  内部实现

  让我们继续讨论一下这个 location 类的示例,编译器在编译阶段会进行以下几个步骤的处理:

  1. 创建变量$x、$y和$z
  2. 调用 Location.is (a, out $x, out $y, out $z)方法,并确认返回结果为 true
  3. 常数模式:检查 object.Equals ($x, 1) 调用的结果
  4. Var 模式:将$y赋给y
  5. 通配符模式:忽略$z变量

  Switch/Select Case 语句块

  Switch 语句块的功能将得到扩展,它将能够使用模式匹配特性。这实际上意味着你可以按以下方式编写语句:

case null: case String s case Location (1, var y, *): 

  限制

  在目前的规格草稿中,还没有对于范围检查的支持。这意味着你不能编写类似于“a is Location ( > 0, 1 to 5, <= 10)”这样的代码。此外目前也不支持在一个列表或迭代器中进行元素匹配

 

 
最新内容:
IT职业生涯感悟:开源经历就是最好的简历[2014-08-18]
极客爱情之十三:技术宅的网购属性[2014-08-18]
亚马逊进军影视业:借数据分析方面优势[2014-08-18]
索罗斯22亿美元做空美股?[2014-08-18]
iPhone 6行货曝光[2014-08-18]
好莱坞明星汤姆·汉克斯跨界推出iPad应用[2014-08-18]
相关内容:

合作伙伴: 黑基网 补天科技 威盾科技 站长下载 新飞金信 北京电信 ZOL应用下载
中华人民共和国增值电信业务经营许可证京ICP备14024464 公安备案号 京1081234 
版权所有©2003-2014 冰盾防火墙  www.BingDun.com 法律声明
总机:(010)51661195