c# 7.0 在两种情况下引入了模式匹配:is 表达式和 switch声明。
模式测试一个值是否具有一定的形状,并且可以从具有匹配形状时的值。
模式匹配为算法提供了更简洁的语法
您可以对任何数据类型(甚至是您自己的数据类型)执行模式匹配,而if/else,你总是需要基元来匹配。
模式匹配可以从表达式中提取值。
模式匹配之前 -
示例public class pi{ public const float pi = 3.142f;}public class rectangle : pi{ public double width { get; set; } public double height { get; set; }}public class circle : pi{ public double radius { get; set; }}class program{ public static void printarea(pi pi){ if (pi is rectangle){ rectangle rectangle = pi as rectangle; system.console.writeline("area of rect {0}", rectangle.width * rectangle.height); } else if (pi is circle){ circle c = pi as circle; system.console.writeline("area of circle {0}", circle.pi * c.radius * c.radius); } } public static void main(){ rectangle r1 = new rectangle { width = 12.2, height = 33 }; rectangle r2 = new rectangle { width = 12.2, height = 44 }; circle c1 = new circle { radius = 12 }; printarea(r1); printarea(r2); printarea(c1); console.readline(); }}
输出area of rect 402.59999999999997area of rect 536.8area of circle 452.44799423217773
模式匹配后 -
示例public class pi{ public const float pi = 3.142f;}public class rectangle : pi{ public double width { get; set; } public double height { get; set; }}public class circle : pi{ public double radius { get; set; }}class program{ public static void printarea(pi pi){ if (pi is rectangle rectangle){ system.console.writeline("area of rect {0}", rectangle.width * rectangle.height); } else if (pi is circle c){ system.console.writeline("area of circle {0}", circle.pi * c.radius * c.radius); } } public static void main(){ rectangle r1 = new rectangle { width = 12.2, height = 33 }; rectangle r2 = new rectangle { width = 12.2, height = 44 }; circle c1 = new circle { radius = 12 }; printarea(r1); printarea(r2); printarea(c1); console.readline(); }}
输出area of rect 402.59999999999997area of rect 536.8area of circle 452.44799423217773
以上就是c# 7.0 中的模式匹配是什么?的详细内容。