C# 匹配模式

在C#中,匹配模式通常指的是使用模式匹配(Pattern Matching)功能来检查一个对象是否符合特定的结构,并从中提取所需的信息。C# 7.0及更高版本引入了几个新的特性来支持模式匹配,主要包括:

  1. switch表达式

  2. is表达式

  3. when子句

  4. 属性模式

  5. 元组模式

  6. var模式

  7. 常量模式

  8. 声明模式

  9. 递归模式

  10. 关系模式

1. 使用is表达式进行类型检查和模式匹配

is表达式可以用来检查一个对象是否为特定类型,并同时将该对象转换为该类型。

复制代码
复制代码

object obj = "Hello, World!";

if (obj is string text)

{

Console.WriteLine(text.ToUpper()); // 输出: HELLO, WORLD!

}

else

{

Console.WriteLine("Not a string");

}

2. 使用switch表达式进行模式匹配

C# 7.0引入了switch表达式,使得在switch语句中可以使用模式匹配。

复制代码
复制代码

object obj = "Hello, World!";

switch (obj)

{

case string s when s.StartsWith("Hello"):

Console.WriteLine($"Starts with 'Hello': {s}");

break;

case int i:

Console.WriteLine($"It's an integer: {i}");

break;

default:

Console.WriteLine("Not matched");

break;

}

3. 元组模式匹配

元组模式匹配允许你检查元组中的元素。

复制代码
复制代码

(int, string) tuple = (1, "Hello");

if (tuple is (int id, string message) && id > 0)

{

Console.WriteLine($"ID: {id}, Message: {message}");

}

4. 属性模式匹配(C# 8.0及以后)

属性模式允许你直接匹配对象的属性值。

复制代码
复制代码

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

Person person = new Person { Name = "Alice", Age = 30 };

if (person is { Name: "Alice", Age: > 25 })

{

Console.WriteLine("Name is Alice and Age is greater than 25.");

}

5. 递归模式(C# 8.0及以后)

递归模式允许你在嵌套结构中使用模式匹配。例如,匹配一个树结构。

复制代码
复制代码

record Tree(string Value, Tree? Left, Tree? Right);

var tree = new Tree("Root", new Tree("Left", null, null), new Tree("Right", null, null));

if (tree is { Left: { Value: "Left" }, Right: { Value: "Right" } })

{

Console.WriteLine("Tree matches the pattern.");

}

通过这些特性,C#的模式匹配功能非常强大,可以用于多种场景,包括但不限于类型检查、数据提取和条件逻辑处理。

相关推荐
爱和冰阔落4 分钟前
【C++多态】虚函数/虚表机制与协变 、override和final关键字全解析
开发语言·c++·面试·腾讯云ai代码助手
码住懒羊羊7 分钟前
【C++】stack|queue|deque
java·开发语言·c++
一只专注api接口开发的技术猿16 分钟前
容器化与调度:使用 Docker 与 K8s 管理分布式淘宝商品数据采集任务
开发语言·前端·数据库
一匹电信狗1 小时前
【LeetCode_160】相交链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
曦樂~1 小时前
【Qt】信号与槽(Signal and Slot)- 简易计算器
开发语言·数据库·qt
歪歪1001 小时前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
yaoxin5211231 小时前
212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)
java·开发语言
wangqiaowq1 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python
十五年专注C++开发2 小时前
QDarkStyleSheet: 一个Qt应用的暗色主题解决方案
开发语言·c++·qt·qss
麦麦鸡腿堡2 小时前
Java的代码块介绍与快速入门
java·开发语言