C# 模式匹配终极指南:提高编码效率

作者:微信公众号:【架构师老卢】
8-17 17:38
7

概述:在上一篇文章中,我们探讨了 C# 中条件语句的复杂性,重点介绍了它们如何实现动态和响应式软件开发。今天,我们将深入探讨 C# 的另一个基本特性:模式匹配。模式匹配在 C# 7.0 中引入并在后续版本中进行了改进,它使开发人员能够有效地检查对象类型和形状,从而提高代码的可读性和可维护性。无论您是模式匹配的新手,还是希望加深理解,本指南都将为您提供其各种模式和增强功能的全面概述。让我们深入了解并解锁 C# 模式匹配的强大功能!C# 模式匹配:基本指南通过模式匹配增强代码可读性C# 7.0 及更高版本中引入的 C# 模式匹配增强了检查对象类型和形状的能力。此功能使代码更具可读性且更易于维护。模式匹配

在上一篇文章中,我们探讨了 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 模式等,您可以创建既动态又适应各种条件的代码。

阅读排行