由于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属性来获取变量的类型。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>