位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 使用is运算符模式表达式进行模式匹配

提问人:刘团圆发布时间:2020-12-07

    由于is运算符通常会实现许多if…else if…语句,因此switch case方法是一种更优雅的模式匹配方法。随着要进行模式匹配的场景増加,使用if...else if…语句会使代码更长、层次更深、更不易阅读。如果出现这种情况,记住你还可以选择使用switch case模式匹配。不过,对于较小的代码段,is运算符是进行模式匹配和过滤数据集的一种非常有效且强大的技术。例如,下面的代码:

object[] data =

    { 1.6180, null, new Cow("Rual"), new Chicken("Lea"), "none" };


foreach (var item in data)

{

    if (item is 1.6180) WriteLine("The Golden Ratio");

    else if (item is null) WriteLine ("The value is null");

    else if (item is Cow co) WriteLine($"The cow is named {co.Name}.");

    else if (item is Chicken ch) WriteLine("The chicken is named" + $" {ch.Name} and {ch.RunlnCircles()}");

    else if (item is var catcher) WriteLine("Catch all for" + $" {catcher.GetType().Name});

}

    data变量中的对象包含几种不同的类型。使用foreach语句迭代object[]数组时,可以使用is运算符査看该变量的类型,当发现匹配时,就执行相应的操作。第一个模式匹配发生在数据为常量值1.6180时,这是一个常量模式示例,第二个模式匹配中的null也是如此。当匹配常置时,使用==运算符可以得到同样的结果,但使用is运算符更容易理解,更加友好。

    data变置中的最后两个对象的类型分别为Cow和Chicken。类型模式在发现匹配的模式时,会分配一个指定类型的新变量。例如,当匹配Chicken时,就会创建一个包含Chicken对象的新变量ch,这样程序员就可以访问Chicken 类的属性和方法,例如,naipe属性和RunInCircles()方法。

    最后,对于不匹配代码路径中任何if...else if…语句的所有情况,可以使用var模式。然后使用catcher变量的GetType().Name属性来获取变量的类型。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部