c# 7.0模式匹配示例与详解

embedded/2025/2/8 23:50:24/

在 C# 7.0 中,模式匹配(Pattern Matching)功能得到了显著增强,主要引入了 is 表达式和 switch 语句的模式匹配扩展,使得代码更简洁、可读性更强。


一、is 表达式增强

1. 类型模式(Type Pattern)

if 语句中直接检查类型并声明变量,无需显式类型转换。

object obj = 42;// C# 7.0 前
if (obj is int)
{int i = (int)obj;Console.WriteLine($"是整数: {i}");
}// C# 7.0 后
if (obj is int i) // 检查类型并赋值给变量 i
{Console.WriteLine($"是整数: {i}");
}
2. 带条件的类型模式

结合条件表达式进一步过滤匹配结果。

object obj = 10;if (obj is int number && number > 5)
{Console.WriteLine($"整数大于5: {number}");
}

二、switch 语句的模式匹配

C# 7.0 允许在 switchcase 中使用类型模式和条件,支持更灵活的分支逻辑。

1. 类型模式与 when 条件
public class Shape { }
public class Circle : Shape { public double Radius { get; set; } }
public class Rectangle : Shape { public double Width, Height; }Shape shape = new Circle { Radius = 5 };switch (shape)
{case Circle c when c.Radius > 10:Console.WriteLine($"大圆,半径: {c.Radius}");break;case Circle c:Console.WriteLine($"小圆,半径: {c.Radius}");break;case Rectangle r:Console.WriteLine($"矩形,面积: {r.Width * r.Height}");break;default:Console.WriteLine("未知形状");break;
}
2. var 模式

使用 var 匹配任意类型,结合 when 条件处理特定逻辑。

object value = "Hello";switch (value)
{case int i:Console.WriteLine($"整数: {i}");break;case string s when s.Length > 5:Console.WriteLine($"长字符串: {s}");break;case var _ when value == null: // 匹配 nullConsole.WriteLine("值为空");break;default:Console.WriteLine("其他类型");break;
}

三、常量模式

匹配常量值,如字符串、数值或 null

object input = "hello";switch (input)
{case "hello":Console.WriteLine("打招呼");break;case string s when s.Length == 0:Console.WriteLine("空字符串");break;case null:Console.WriteLine("输入为空");break;
}

四、实际应用场景示例

示例 1:处理多种数据类型
public static void PrintInfo(object obj)
{if (obj is null) // 显式处理 null{Console.WriteLine("对象为空");}else if (obj is int i){Console.WriteLine($"整数: {i}");}else if (obj is string s){Console.WriteLine($"字符串长度: {s.Length}");}
}
示例 2:订单折扣计算
public class Order { public bool IsVIP { get; set; } }public decimal CalculateDiscount(Order order, decimal price)
{switch (order){case var _ when price > 1000:return price * 0.2m;case var o when o.IsVIP:return price * 0.1m;default:return 0;}
}


http://www.ppmy.cn/embedded/160657.html

相关文章

DeepSeek关联WPS使用指南与案例解析

在数字化办公时代,人工智能(AI)技术正深刻地改变着我们处理文档、分析数据和进行创意表达的方式。DeepSeek作为新兴的AI技术代表,与办公软件巨头WPS的结合,为用户带来了前所未有的高效办公体验。本教程将深入探讨如何将…

基于微信小程序的在线点餐(堂食)平台的设计与实现ssm+论文源码调试讲解

第四章 系统设计 设计一个系统不单单是设计系统的页面,可以说系统设计其本质是一个结合了众多设计过程的比较复杂的系统工程。一般来说,在完成系统设计时,需要了解和掌握很多设计的知识,有界面布局技术的知识,页面采用…

通信易懂唠唠SOME/IP——SOME/IP 协议规范

主要介绍SOME/IP协议中远程过程调用RPC,事件通知Event。 一 Transport Protocol Bindings传输协议绑定 SOME/IP目前支持TCP连接,UDP单播连接,UDP多播连接 1.1 使用UDP还是TCP的指导原则: • 只有在传输大数据块(>1400bytes…

硬件电路基础

目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向: 正极->负极,正电荷定向移动方向为电流方向,与电子定向移动方向相反。 2.电荷(这里表示负电荷)运动方向: 与电流方向相反 1.4 测电压的时候 2. 地线…

Ubuntu22.04操作系统4090显卡电脑本地化部署DeepSeek

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 概述 听说最近很火的DeepSeek,就像本地化部署一个看看,发现本地化部署很简单,在这儿记录一下。 下载Ollama 看好多指…

deepseek API 调用-python

【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码: https://download.csdn.net/download/notfindjob/90343352

嵌入式C语言面试常考题(一)

一、嵌入式软件设计中的 volatile 关键字的含义和用法? 1. 什么是 volatile? volatile 是一个告诉编译器不要优化变量的关键字。 它的意思是:“这个变量的值可能会随时变化,所以每次都要重新读取它的最新值。” 如果不加 volatile 会发生什么? 编译器为了让程序运行得…

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…