在上一篇文章中,我们探讨了 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
使用类型模式时,如果变量的值不是相关类型,则变量可能为 null,如果使用该变量,则会导致错误。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 模式等,您可以创建既动态又适应各种条件的代码。
如果你喜欢我的文章,请给我一个赞!谢谢