新闻中心

C#的模式匹配是什么?如何使用is和switch表达式简化条件逻辑?

2025-11-11
浏览次数:
返回列表
模式匹配通过is和switch表达式实现类型检查与解构,如if (obj is string str)可同时判断并赋值,switch表达式支持类型、属性及when条件判断,提升代码简洁性与可读性。

c#的模式匹配是什么?如何使用is和switch表达式简化条件逻辑?

模式匹配是C#中一种强大的语法特性,它允许你根据数据的结构或类型来判断并提取信息,而不是仅仅依赖传统的条件判断。通过is表达式和switch表达式,你可以写出更简洁、可读性更强的条件逻辑。

使用 is 表达式进行类型检查与变量赋值

C#的is关键字不仅用于判断对象是否为某个类型,还能在判断的同时进行变量声明和赋值,避免了额外的类型转换。

例如,你想判断一个对象是否为字符串,并且在是的情况下使用它:

if (obj is string str)
{
    Console.WriteLine($"字符串长度:{str.Length}");
}

这段代码比传统写法更紧凑:

if (obj != null && obj is string)
{
    string str = (string)obj;
    Console.WriteLine($"字符串长度:{str.Length}");
}

注意:如果类型不匹配,str不会被赋值,作用域也仅限于if块内。

你还可以结合常量、notandor等操作符进行更复杂的判断:

if (value is not null and >= 0 and <= 100)
{
    Console.WriteLine("值在0到100之间");
}
</font>

使用 switch 表达式简化多分支逻辑

传统的switch语句语法冗长,需要break,而C# 8.0引入的switch表达式更加函数式、简洁,返回一个值。

千鹿Pr助手 千鹿Pr助手

智能Pr插件,融入众多AI功能和海量素材

千鹿Pr助手 128 查看详情 千鹿Pr助手

比如,根据对象类型返回不同的描述:

string description = obj switch
{
    null => "空值",
    string s when s.Length > 0 => $"非空字符串:{s}",
    string => "空字符串",
    int i => $"整数:{i}",
    _ => "未知类型"
};

这里的关键点:

  • 表达式语法:每个分支返回一个表达式,不需要break
  • 类型模式:可以直接匹配类型并声明变量(如int i)。
  • when 条件:可以在模式后加when子句进行进一步判断。
  • _ 表示默认情况:相当于default

结合属性模式和递归模式处理复杂对象

如果你有一个类,比如Point

public class Point { public int X { get; set; } public int Y { get; set; } }
</font>

你可以用属性模式直接在switch中解构判断:

string result = point switch
{
    { X: 0, Y: 0 } => "原点",
    { X: 0 } => "Y轴上",
    { Y: 0 } => "X轴上",
    { X: var x, Y: var y } when x == y => "在y=x线上",
    _ => "其他位置"
};

这种写法避免了多次访问属性和嵌套if,逻辑清晰。

基本上就这些。合理使用isswitch表达式,能让你的C#代码更现代、更易维护。

以上就是C#的模式匹配是什么?如何使用is和switch表达式简化条件逻辑?的详细内容,更多请关注其它相关文章!


# 不需要  # 全网线上推广营销策略  # 海量关键词排名  # 掇刀seo推广技巧  # 鞍山网站建设排名介绍  # 文明海丰网站建设情况  # 河北优化型网站建设方案  # 门户网站建设明细报价表  # 大连关键词搜索排名软件  # 廊坊运营网站推广公司  # seo认准7火星软件  # 可以用  # 模式匹配  # 你可以  # 子句  # 如果你  # 身份验证  # 如何实现  # 如何使用  # 遍历  # 递归  # 作用域  # switch  # c# 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  c++ 命名空间怎么用 c++ namespace使用指南  零跑汽车11月交付量达70327台 实现连续9个月正增长  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  夸克浏览器图书入口 夸克手机浏览器阅读入口  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  高德地图怎么看全景照片_高德地图全景照片浏览教程  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  J*aScript map 迭代中检测空数组元素的有效方法  随机参数递归函数的基准调用次数与时间复杂度探究  c++ 获取系统当前时间 c++时间戳获取方法  C++如何比较两个字符串_C++ string compare函数与操作符对比  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  百度网盘网页版入口 百度网盘网页版官方登录网址  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  Pygame教程:解决用户输入与游戏状态更新不同步问题  CSS图片焦点样式实现教程:理解与应用tabindex属性  qq游戏大厅官方下载_qq游戏免费下载安装入口  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  GemBox Document HTML转PDF垂直文本渲染问题及解决方案  微信商城在哪里打开【步骤】  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  抖音怎么赚钱_抖音创作者变现方法与途径指南  12306选座如何查看座位示意图_12306座位示意图解读与使用  C#使用XPath查询节点时出错? 常见语法错误与调试技巧  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  优化Log4j2控制台输出性能:解决异步日志瓶颈  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  大象笔记网页版入口 印象笔记网页版登录入口  利用Bokeh CustomJS动态控制DataTable列可见性  AO3网页版最新入口合集 Archive of Our Own在线访问指南  mysql备份恢复性能优化_mysql备份恢复性能优化方法  iCloud登录入口网页版 苹果iCloud官网登录  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  J*a实现学校排课程序_面向对象结构化项目示例  谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践 

搜索