最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 使用模式匹配的好處總結(jié)

 更新時(shí)間:2024年07月22日 10:01:41   作者:萬(wàn)雅虎  
模式匹配的這些用途展示了它在簡(jiǎn)化代碼、提高可讀性和靈活處理不同類型和條件的強(qiáng)大能力,隨著C#語(yǔ)言的發(fā)展,模式匹配的功能和應(yīng)用場(chǎng)景將會(huì)進(jìn)一步擴(kuò)展和深化,這篇文章主要介紹了C# 使用模式匹配的好處,需要的朋友可以參考下
  • 類型檢查和轉(zhuǎn)換:當(dāng)你需要檢查對(duì)象是否為特定類型,并且希望在同一時(shí)間內(nèi)將其轉(zhuǎn)換為那個(gè)類型時(shí),模式匹配提供了一種更簡(jiǎn)潔的方式來(lái)完成這一任務(wù),避免了使用傳統(tǒng)的as和is操作符后還需要進(jìn)行額外的null檢查。

  • 復(fù)雜條件邏輯:在處理復(fù)雜的條件邏輯時(shí),特別是涉及到多個(gè)條件和類型的情況下,使用模式匹配可以使代碼更加清晰易讀。通過(guò)模式匹配,可以將復(fù)雜的if-else鏈或switch語(yǔ)句簡(jiǎn)化,使邏輯更直觀。

  • 解構(gòu)復(fù)合類型:當(dāng)你需要從復(fù)合類型(如元組、自定義類等)中提取值時(shí),模式匹配允許你直接在條件檢查中進(jìn)行解構(gòu),這樣可以避免編寫(xiě)額外的解構(gòu)代碼,使得代碼更加簡(jiǎn)潔。

  • 范圍檢查:對(duì)于需要進(jìn)行范圍檢查的場(chǎng)景,如檢查一個(gè)數(shù)是否落在某個(gè)區(qū)間內(nèi),使用C# 9.0引入的關(guān)系模式可以極大簡(jiǎn)化代碼,使得范圍檢查邏輯一目了然。

  • 邏輯組合:在需要對(duì)多個(gè)條件進(jìn)行邏輯組合的情況下,如需要檢查一個(gè)值是否滿足多個(gè)條件之一或全部條件,使用邏輯模式可以直接在模式匹配表達(dá)式中使用and、or和not運(yùn)算符,避免了復(fù)雜的邏輯嵌套。

  • 數(shù)據(jù)驗(yàn)證:模式匹配可以用于數(shù)據(jù)驗(yàn)證場(chǎng)景,特別是當(dāng)驗(yàn)證邏輯涉及到類型檢查、值范圍檢查或特定屬性值檢查時(shí)。通過(guò)模式匹配,可以在單個(gè)表達(dá)式中完成所有這些檢查,使得驗(yàn)證邏輯更加緊湊和易于維護(hù)。

  • 多態(tài)行為:在處理需要根據(jù)對(duì)象類型執(zhí)行不同操作的多態(tài)行為時(shí),模式匹配提供了一種更靈活的方式來(lái)替代傳統(tǒng)的虛方法或接口實(shí)現(xiàn)。這使得在不修改原有類層次結(jié)構(gòu)的情況下,能夠更容易地?cái)U(kuò)展或修改行為。

  • 替代訪問(wèn)者模式:在實(shí)現(xiàn)訪問(wèn)者設(shè)計(jì)模式時(shí),模式匹配可以作為一種更簡(jiǎn)潔的替代方案,特別是在處理復(fù)雜的對(duì)象結(jié)構(gòu)時(shí)。通過(guò)模式匹配,可以直接在一個(gè)地方處理所有類型的情況,而不需要為每種類型創(chuàng)建單獨(dú)的訪問(wèn)者方法。

模式匹配的這些用途展示了它在簡(jiǎn)化代碼、提高可讀性和靈活處理不同類型和條件的強(qiáng)大能力。隨著C#語(yǔ)言的發(fā)展,模式匹配的功能和應(yīng)用場(chǎng)景將會(huì)進(jìn)一步擴(kuò)展和深化。

下面我們看下一些經(jīng)典的模式匹配編碼風(fēng)格:

is斷言 變量str已被安全地轉(zhuǎn)換為string類型

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

is對(duì)可空類型的斷言

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模式 ,無(wú)需我們提前做轉(zhuǎn)換以節(jié)省編碼量

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引入了屬性模式,允許基于對(duì)象的屬性進(jìn)行模式匹配

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

C# 9.0引入的邏輯模式,它允許使用邏輯運(yùn)算符and、ornot來(lái)組合模式。

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

元組模式允許你對(duì)元組的元素進(jìn)行模式匹配,這在處理元組返回值或多值情況時(shí)非常有用

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

列表模式允許對(duì)數(shù)組、列表等集合進(jìn)行模式匹配,可以匹配集合的長(zhǎng)度、元素等屬性。這對(duì)于處理集合數(shù)據(jù)時(shí)進(jìn)行模式匹配提供了極大的便利。

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.");
}

切片模式允許你匹配集合的一部分,而不是整個(gè)集合。這在你只關(guān)心集合的某個(gè)特定部分時(shí)特別有用。

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

這里只是介紹了部分好用常見(jiàn)的模式匹配,隨著C#語(yǔ)言的逐代增強(qiáng),可能會(huì)有更多的新特性和改進(jìn)被引入。

到此這篇關(guān)于C# 使用模式匹配的好處,因?yàn)楹糜盟酝扑]~的文章就介紹到這了,更多相關(guān)C# 使用模式匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組的方法

    C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組的方法

    這篇文章主要介紹了C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組中方法,涉及C#操作HashTable的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#開(kāi)發(fā)微信門戶及應(yīng)用(5) 用戶分組信息管理

    C#開(kāi)發(fā)微信門戶及應(yīng)用(5) 用戶分組信息管理

    這篇文章主要為大家詳細(xì)介紹了C#開(kāi)發(fā)微信門戶及應(yīng)用第五篇,用戶分組信息管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#實(shí)現(xiàn)騎士飛行棋

    C#實(shí)現(xiàn)騎士飛行棋

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)騎士飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C#實(shí)現(xiàn)拼圖游戲

    C#實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#基礎(chǔ)知識(shí)之new關(guān)鍵字介紹

    C#基礎(chǔ)知識(shí)之new關(guān)鍵字介紹

    在 C# 中,new 關(guān)鍵字可用作運(yùn)算符、修飾符或約束,本文主要介紹這三種用法。
    2016-04-04
  • C#動(dòng)態(tài)查詢之巧用Expression組合多條件表達(dá)式的方法和步驟

    C#動(dòng)態(tài)查詢之巧用Expression組合多條件表達(dá)式的方法和步驟

    在C#中,可以使用AndAlso和OrElse方法組合兩個(gè)Expression<Func<T, bool>>類型的表達(dá)式,下面通過(guò)實(shí)例代碼給大家分享C#動(dòng)態(tài)查詢之巧用Expression組合多條件表達(dá)式,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C#9新特性init only setter的使用

    C#9新特性init only setter的使用

    這篇文章主要介紹了C#9新特性init only setter的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#中Timer定時(shí)器類的簡(jiǎn)單使用

    C#中Timer定時(shí)器類的簡(jiǎn)單使用

    定時(shí)器就是經(jīng)過(guò)固定時(shí)間,執(zhí)行固定任務(wù),本文主要介紹了C#中Timer定時(shí)器類的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#使用DateAndTime.DateDiff實(shí)現(xiàn)計(jì)算年齡

    C#使用DateAndTime.DateDiff實(shí)現(xiàn)計(jì)算年齡

    這篇文章主要為大家詳細(xì)介紹了C#如何使用DateAndTime.DateDiff實(shí)現(xiàn)根據(jù)生日計(jì)算年齡,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01
  • Unity虛擬搖桿的實(shí)現(xiàn)方法

    Unity虛擬搖桿的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Unity虛擬搖桿的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論

康乐县| 永宁县| 连南| 大同市| 固阳县| 射阳县| 蕲春县| 勐海县| 墨竹工卡县| 威信县| 江川县| 兴山县| 玉溪市| 广平县| 云南省| 抚州市| 康保县| 临夏市| 林州市| 建瓯市| 伊通| 安义县| 斗六市| 定襄县| 宜宾县| 西盟| 济阳县| 柳州市| 襄垣县| 大同县| 万全县| 辽宁省| 安阳市| 建宁县| 桐柏县| 广安市| 威信县| 八宿县| 德江县| 成都市| 宜都市|