在上一篇文章中,我们探讨了 C# 中条件语句的复杂性,重点介绍了它们如何实现动态和响应式软件开发。今天,我们将深入探讨 C# 的另一个基本特性:模式匹配。模式匹配在 C# 7.0 中引入并在后续版本中进行了改进,它使开发人员能够有效地检查对象类型和形状,从而提高代码的可读性和可维护性。无论您是模式匹配的新手,还是希望加深理解,本指南都将为您提供其各种模式和增强功能的全面概述。让我们深入了解并解锁 C# 模式匹配的强大功能!
C# 模式匹配:基本指南通过模式匹配增强代码可读性C# 7.0 及更高版本中引入的 C# 模式匹配增强了检查对象类型和形状的能力。此功能使代码更具可读性且更易于维护。模式匹配特别用于 switch 和 if 语句,允许使用各种模式进行对象检查,包括:
类型模式
恒定模式
Var 模式
递归的
掌握类型模式类型模式是运算符的模式化版本,用于确定对象内的类型。is
用于型式测定:is
object x = 125; if (x is string) { string xx = x as string; Console.WriteLine("x is of type string"); } if (x is int) { int xx = (int)x; Console.WriteLine("x is of type int"); }在这里,在确定类型后 ,对象内的值被解开装箱 using 或 cast 转换,并且操作继续基于类型。此方法使代码冗长。使用类型模式时:isas
object x = 125; if (x is string xx) Console.WriteLine("x is of type string"); else if (x is int xxx) Console.WriteLine("x is of type int");在这里,不需要铸造;该值将直接拆箱到 OR 中。xxxxx
利用常数模式常数模式使我们能够将数据与固定值进行比较。
object x = "John"; if (x is "John") Console.WriteLine("John");在此示例中,使用 执行控制,并相应地继续执行代码过程。x is 'John'
如果类型控制是通过运算符完成的,则它不是一个恒定模式。is
if (x is string) Console.WriteLine("x is string");但是,如果执行值控制而不是类型控制,则它是一个常量模式。
if (x is 4) Console.WriteLine("x is 4");探索 Var 模式var 模式允许我们获取带有变量的数据。var
object x = "Turkey"; if (x is var a) { Console.WriteLine(a); }在这里,它允许将值赋给变量,而不管 的类型如何。x
**重要提示:**关键字的类型是在编译时确定的,而模式的类型是在运行时确定的。varvar
使用类型模式时,如果变量的值不是相关类型,则变量可能为 ,如果使用该变量,则会导致错误。x
但是,在 var 模式中,由于变量的值将而不考虑其值分配给变量,因此变量不会为空,并且可以安全地使用。
揭示递归模式这种模式在开关壳结构中引入了许多创新。也可以在开关块中检查引用类型变量。此外,开关块通过该命令获得了各种条件/资格属性。when
C# 9.0 中的模式匹配增强功能关系模式像 、 、 和 这样的运算符可以在模式中使用,以便快速比较。<><=>=
int number = 111; string result = number switch { < 50 => "Less than 50", > 50 => "Greater than 50", 50 => "Equal to 50", };switch 语句本质上是一个相等性检查控制流,现在可以与关系模式执行其他类型的比较。
逻辑模式可以使用逻辑运算符,如 、 和。andornot
例:
int number = 111; string result = number switch { > 10 and < 50 => "Greater than 10 and less than 50", > 50 and < 100 => "Greater than 50 and less than 100", not 100 => "Not equal to 100", 100 => "Equal to 100", };✨ 掌握 C# 中的模式匹配对于开发高效且强大的软件至关重要。通过利用类型模式、常量模式、var 模式等,您可以创建既动态又适应各种条件的代码。
如果你喜欢我的文章,请给我一个赞!谢谢