狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 使用模式匹配

freeflydom
2024年7月22日 9:28 本文熱度 912
  1. 類型檢查和轉換:當你需要檢查對象是否為特定類型,并且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符后還需要進行額外的null檢查。

  2. 復雜條件邏輯:在處理復雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更加清晰易讀。通過模式匹配,可以將復雜的if-else鏈或switch語句簡化,使邏輯更直觀。

  3. 解構復合類型:當你需要從復合類型(如元組、自定義類等)中提取值時,模式匹配允許你直接在條件檢查中進行解構,這樣可以避免編寫額外的解構代碼,使得代碼更加簡潔。

  4. 范圍檢查:對于需要進行范圍檢查的場景,如檢查一個數是否落在某個區間內,使用C# 9.0引入的關系模式可以極大簡化代碼,使得范圍檢查邏輯一目了然。

  5. 邏輯組合:在需要對多個條件進行邏輯組合的情況下,如需要檢查一個值是否滿足多個條件之一或全部條件,使用邏輯模式可以直接在模式匹配表達式中使用and、or和not運算符,避免了復雜的邏輯嵌套。

  6. 數據驗證:模式匹配可以用于數據驗證場景,特別是當驗證邏輯涉及到類型檢查、值范圍檢查或特定屬性值檢查時。通過模式匹配,可以在單個表達式中完成所有這些檢查,使得驗證邏輯更加緊湊和易于維護。

  7. 多態行為:在處理需要根據對象類型執行不同操作的多態行為時,模式匹配提供了一種更靈活的方式來替代傳統的虛方法或接口實現。這使得在不修改原有類層次結構的情況下,能夠更容易地擴展或修改行為。

  8. 替代訪問者模式:在實現訪問者設計模式時,模式匹配可以作為一種更簡潔的替代方案,特別是在處理復雜的對象結構時。通過模式匹配,可以直接在一個地方處理所有類型的情況,而不需要為每種類型創建單獨的訪問者方法。

模式匹配的這些用途展示了它在簡化代碼、提高可讀性和靈活處理不同類型和條件的強大能力。隨著C#語言的發展,模式匹配的功能和應用場景將會進一步擴展和深化。

下面我們看下一些經典的模式匹配編碼風格:

is斷言 變量str已被安全地轉換為string類型

object obj = "Hello, World!";
if (obj is string str) {
   Console.WriteLine(str);
}

is對可空類型的斷言

public record Person(int Id, string? Name, bool? IsActived);
var person = new Person(1, "vipwan", null);
if (person?.IsActived is true)
{
   Console.WriteLine($"Id {person.Id} 已激活");
}

switch 允許使用多種模式,包括類型模式、常量模式和var模式 ,無需我們提前做轉換以節省編碼量

switch (obj) {
   case 0:
       Console.WriteLine("Zero");
       break;
   case var value:
       Console.WriteLine($"Value: {value}");
       break;
}

switch 中使用棄元_代替變量

public static string CronEveryNHours(this int n) => n switch
{
(>= 1 and < 24) => $"0 0/{n} * * *",
_ => throw new ArgumentException("n must be between 1 and 24", nameof(n))
};

C# 8.0引入了屬性模式,允許基于對象的屬性進行模式匹配

public record Person(string Name,int Age);
var person = new Person("vipwan", 30);
//通俗易懂:如果person不為null,且name==vipwan 并且age>=18的時候
if (person is { Name: "vipwan", Age: >= 18 }) {
   Console.WriteLine("vipwan is an adult.");
}

C# 9.0引入的邏輯模式,它允許使用邏輯運算符andornot來組合模式。

if (number is > 0 and < 10 or 100) {
    Console.WriteLine("Number is between 0 and 10 or equals 100.");
}

元組模式允許你對元組的元素進行模式匹配,這在處理元組返回值或多值情況時非常有用

var numbers = (1, "one", 18);if (numbers is (1, string name, int age)) {
    Console.WriteLine($"The name of 1 is {name}, age {age}!");
}

列表模式允許對數組、列表等集合進行模式匹配,可以匹配集合的長度、元素等屬性。這對于處理集合數據時進行模式匹配提供了極大的便利。

int[] numbers = { 1, 2, 3 };
if (numbers is [1, 2, 3]) {
   Console.WriteLine("The array contains the numbers 1, 2, and 3 in that order.");
}

切片模式允許你匹配集合的一部分,而不是整個集合。這在你只關心集合的某個特定部分時特別有用。

int[] numbers = { 0, 1, 2, 3, 4 };
if (numbers is [0, .., 4]) {
   Console.WriteLine("The array starts with 0 and ends with 4.");
}
C#復制全屏

這里只是介紹了部分好用常見的模式匹配,隨著C#語言的逐代增強,可能會有更多的新特性和改進被引入。

轉自https://www.cnblogs.com/vipwan/p/18309290 作者萬雅虎


該文章在 2024/7/22 9:35:37 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved