C#模式匹配用法與總結

1. 模式匹配概述??

模式匹配是C# 7.0引入的機制,用于檢查數據的類型、值或結構,并提取信息。通過is表達式、switch語句/表達式實現,顯著簡化條件邏輯,提升代碼可讀性和安全性。
??核心優勢??:

  • ??簡潔性??:減少冗余的類型檢查和轉換代碼。
  • ??安全性??:編譯時檢查模式有效性(如屬性是否存在)。
  • ??表達力??:支持嵌套、遞歸和邏輯組合模式。

??2. 核心模式類型與語法??

??(1) 類型模式(Type Pattern)??
  • ??用途??:檢查對象是否為指定類型,并提取變量。
  • ??語法??:if (obj is string s) { Console.WriteLine(s.Length); }
    • 直接使用s無需顯式轉換,作用域限于條件塊內。
??(2) 常量模式(Constant Pattern)??
  • ??用途??:匹配常量值(如數值、字符串、null)。
  • ??語法??:
    if (value is 42) { /* 匹配數值 */ }  
    if (text is null) { /* 匹配空值 */ }  
    if (input is not null) { /* 非空檢查 */ }  // C# 9.0+[1,6](@ref)
??(3) 屬性模式(Property Pattern, C# 8.0+)??
  • ??用途??:根據對象屬性值匹配。
  • ??語法??:
    if (person is { Age: >= 18, Name: "Alice" }) { /* 匹配年齡≥18且名為Alice */ }
??(4) 元組與位置模式(Tuple & Positional Pattern)??
  • ??用途??:解構元組或對象(需實現Deconstruct方法)。
  • ??語法??:
    var point = (x: 0, y: 1);  
    if (point is (0, 1)) { /* 匹配坐標 */ }  
    if (pt is (var x, >0) && x == y) { /* 解構并匹配 */ }[
??(5) 列表模式(List Pattern, C# 11+)??
  • ??用途??:匹配數組或列表的元素序列。
  • ??語法??:
    if (numbers is [1, 2, .. var rest]) { /* 匹配前兩個元素并捕獲剩余 */ }
??(6) 邏輯模式(Logical Pattern, C# 9.0+)??
  • ??用途??:使用andornot組合條件。
  • ??語法??:
    if (num is >10 and <20 or 42) { /* 數值范圍或等于42 */ }

??3. 主要應用場景??

??(1) 替代類型檢查與轉換??
// 傳統寫法  
if (shape is Circle) { var c = (Circle)shape; }  
// 模式匹配寫法  
if (shape is Circle c) { Console.WriteLine(c.Radius); }
??(2) 簡化復雜條件邏輯??
string TaxCategory(IncomeData data) => data switch {  { Income: <10000 } => "低收入",  { Income: >=10000 and <50000, IsCitizen: true } => "中等收入公民",  _ => "其他"  
}
??(3) 處理嵌套對象??
if (student is { Address.City: "Beijing" }) { /* 匹配嵌套屬性 */ }

??4. 版本支持與最佳實踐??

  • ??版本演進??:
    • C# 7.0:基礎類型、常量模式。
    • C# 8.0:屬性模式、遞歸模式、switch表達式。
    • C# 9.0:邏輯模式(and/or/not)。
    • C# 11:列表模式、切片模式。
  • ??最佳實踐??:
    • 優先使用switch表達式替代多重if-else
    • 結合not null避免空引用異常。
    • 對復雜結構使用遞歸模式提升可讀性。

??5. 模式匹配 vs.?if語句??

??特性????模式匹配????if語句??
??簡潔性??高(減少冗余代碼)低(需顯式類型檢查)
??可讀性??高(邏輯直觀)嵌套復雜時較差
??適用場景??復雜條件、類型檢查簡單條件判斷
??類型安全??編譯時檢查需手動處理轉換異常

2

5


參考:

  1. C#模式匹配詳解
  2. 再聊 C# 里的模式匹配,10個常用方法總結
  3. 模式匹配概述
  4. C# 模式匹配及常見形式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91911.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改git commit 提交版本的描述信息

1 修改最后一次提交&#xff08;未推送到遠程倉庫&#xff09; 適用場景&#xff1a;提交僅存在于本地&#xff0c;尚未執行 git push 操作步驟&#xff1a;git commit --amend -m "新的正確備注"原理&#xff1a;–amend 會合并新的修改到上一次提交&#xff0c;并允…

PyQt GUI開發初學者:固定尺寸還是全屏自適應?

PyQt GUI開發初學者&#xff1a;固定尺寸還是全屏自適應&#xff1f;在PyQt GUI開發中&#xff0c;新手常常面臨一個選擇&#xff1a;是應該為應用程序設置固定尺寸&#xff0c;還是采用全屏自適應設計&#xff1f;這個決定不僅關乎用戶體驗&#xff0c;還影響開發效率和應用的…

量子圖靈機 Quantum Turing Machine, QTM

量子圖靈機&#xff08;Quantum Turing Machine, QTM&#xff09;是經典圖靈機&#xff08;Turing Machine, TM&#xff09;在量子計算框架下的推廣&#xff0c;它利用量子力學原理&#xff08;如疊加態、糾纏和幺正演化&#xff09;擴展了計算能力。下面對量子圖靈機進行解析。…

用于 UBI 的 Elasticsearch 插件:從搜索查詢中分析用戶行為

作者&#xff1a;來自 Elastic Eduard Martin 想獲得 Elastic 認證&#xff1f;了解下一期 Elasticsearch Engineer 培訓的時間&#xff01; Elasticsearch 擁有豐富的新功能&#xff0c;幫助你為你的使用場景構建最佳搜索解決方案。深入查看我們的示例筆記本以了解更多信息&a…

python的蛋糕店管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 該系統通…

開源項目:排序算法的多種實現方式

以 排序算法 為例&#xff0c;展示如何在 Python 中進行不同實現方式的對比項目概述本項目旨在通過 Python 實現幾種經典的排序算法&#xff0c;并通過性能對比、代碼注釋和優化手段&#xff0c;為開源社區提供參考。選擇排序、冒泡排序、快速排序和歸并排序作為主要算法&#…

操作系統數據格式相關(AI回答)

二進制接口&#xff08;ABI&#xff09; DeepSeek-R1 回答完成 深度思考完成 用時20秒&#xff0c;搜索全網24篇資料 二進制接口&#xff08;ABI&#xff0c;Application Binary Interface&#xff09;是計算機系統中定義二進制層面交互規則的低層接口規范&#xff0c;確保不…

從入倉到結算全自動化:易境通如何重構散貨拼柜業務流程?

在全球貿易蓬勃發展的今天&#xff0c;海運拼箱&#xff08;LCL&#xff09;憑借成本低、靈活性強的優勢&#xff0c;成為中小貨主、跨境電商和國際貿易企業的首選物流方式。然而&#xff0c;散貨拼柜業務涉及多貨主、多環節、多流程&#xff0c;傳統管理方式存在信息不透明、效…

CAP 理論筆記

一、CAP 理論概述 CAP 理論由 Eric Brewer 于 2000 年提出&#xff0c;并在 2002 年被正式證明。它描述了分布式系統在 一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分區容忍性&#xff08;Partition Tolerance&#xff09; 三個…

Android 底層實現基礎

Activity 生命周期應用內 Activity 跳轉流程&#xff08;A → B&#xff09; 從 Activity A 打開新的 Activity B&#xff08;如點擊按鈕跳轉詳情頁&#xff09; A.onCreate() → A.onStart() → A.onResume() &#xff08;A 已在前臺&#xff09;點擊跳轉按鈕 → A.onPause() …

MySQL進階:(第一篇) 深入解析MySQL存儲引擎架構

一、MySQL的體系結構連接層&#xff1a;最上層是一些客戶端和鏈接服務&#xff0c;主要完成一些類似于連接處理、授權認證、及相關的安全方案。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。服務層&#xff1a;第二層架構主要完成大多數的核心服務功能&#xff0c…

京東m端 滑塊 分析 t30

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01;部分python代碼response requests.pos…

CentOS使用命令行工具為其配置靜態網絡并使用VMware軟件ovf配置文件快速配置多臺不同ip的centos文件

目錄 一、實驗前準備 1.SSH遠程登錄工具 二、CentOS配置靜態IP并實現遠程ssh登錄 1.VMware軟件查看NAT模式下默認網段和網關 2.使用ipconfig查看當前網卡名字和動態分配的ip地址 3.使用VIM編輯網絡配置文件&#xff08;此步驟可有其他編輯器替代&#xff0c;例如&#xf…

設計模式學習[17]---組合模式

文章目錄前言1.引例2.一致性抽象處理3.透明組合模式與安全組合模式總結前言 在畫類圖的時候&#xff0c;類與類之間有組合關系&#xff0c;聚合關系&#xff0c;我本來以為這個組合模式應該是整體與部分的關系&#xff0c;其實設計模式中的組合模式和類圖中的組合不是同一個東…

48Days-Day12 | 添加字符,數組變換,裝箱問題

添加字符 添加字符_牛客筆試題_牛客網 算法原理 因為本題數據量都比較小&#xff0c;所以我們可以直接使用暴力解法&#xff0c;枚舉B字符串的每一個位置作為與A字符串比較的起點&#xff0c;維護一個最小位數的值 代碼 import java.util.*;// 注意類名必須為 Main, 不要有…

關于npm前端項目編譯時棧溢出 Maximum call stack size exceeded的處理方案

背景&#xff1a;使用vueelementui的前端項目&#xff0c;使用jenkins進行自動化編譯部署&#xff0c;某天在進行編譯發版的時候&#xff0c;突然出現 npm ERR! Maximum call stack size exceeded 錯誤&#xff0c;一直都沒法編譯成功。原因&#xff1a;隨著前端項目的不斷迭代…

微信小程序組件發布為 npm 包的具體步驟

1. 準備工作 首先&#xff0c;您需要在系統上安裝 Node.js 和 npm。如果尚未安裝&#xff0c;請訪問 Node.js — Run JavaScript Everywhere 下載并安裝最新版本。 2. 創建獨立的組件目錄 為了更好地管理組件&#xff0c;建議將其從當前項目中獨立出來&#xff1a; wechat-…

LCM中間件入門(2):LCM核心實現原理解析

文章目錄一、good()函數&#xff1a;LCM實例狀態檢查的實現原理1. 實現邏輯2. 簡化代碼示例&#xff08;C語言核心邏輯&#xff09;二、publish()&#xff1a;向指定channel發送消息的原理1. 完整流程拆解2. 簡化代碼示例&#xff08;C核心邏輯&#xff09;三、subscribe()&…

Nginx安裝及配置

一.nginx安裝1.1nginx概述1.1.1 nginx介紹Nginx是一款高性能的開源HTTP和反向代理服務器&#xff0c;是免費的、開源的、高性能的HTTP和反向代理服務器、郵件代理服務器、以及TCP/UDP代理服務器解決C10K問題&#xff08;10K Connections&#xff09;。同時也支持IMAP/POP3代理服…

SelectDB數據庫,新一代實時數據倉庫的全面解析與應用

摘要&#xff1a;SelectDB是一款基于Apache Doris的新一代實時數據倉庫解決方案&#xff0c;具備實時極速、融合統一、彈性架構和開放生態四大核心特性。它采用云原生存算分離架構&#xff0c;支持秒級數據更新、毫秒級查詢響應&#xff0c;在TPC-H等基準測試中性能超越傳統系統…