位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C# > 問(wèn)題詳情

C# 使用is運(yùn)算符模式表達(dá)式進(jìn)行模式匹配

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

    由于is運(yùn)算符通常會(huì)實(shí)現(xiàn)許多if…else if…語(yǔ)句,因此switch case方法是一種更優(yōu)雅的模式匹配方法。隨著要進(jìn)行模式匹配的場(chǎng)景増加,使用if...else if…語(yǔ)句會(huì)使代碼更長(zhǎng)、層次更深、更不易閱讀。如果出現(xiàn)這種情況,記住你還可以選擇使用switch case模式匹配。不過(guò),對(duì)于較小的代碼段,is運(yùn)算符是進(jìn)行模式匹配和過(guò)濾數(shù)據(jù)集的一種非常有效且強(qiáng)大的技術(shù)。例如,下面的代碼:

object[] data =

    { 1.6180, null, new Cow("Rual"), new Chicken("Lea"), "none" };


foreach (var item in data)

{

    if (item is 1.6180) WriteLine("The Golden Ratio");

    else if (item is null) WriteLine ("The value is null");

    else if (item is Cow co) WriteLine($"The cow is named {co.Name}.");

    else if (item is Chicken ch) WriteLine("The chicken is named" + $" {ch.Name} and {ch.RunlnCircles()}");

    else if (item is var catcher) WriteLine("Catch all for" + $" {catcher.GetType().Name});

}

    data變量中的對(duì)象包含幾種不同的類型。使用foreach語(yǔ)句迭代object[]數(shù)組時(shí),可以使用is運(yùn)算符査看該變量的類型,當(dāng)發(fā)現(xiàn)匹配時(shí),就執(zhí)行相應(yīng)的操作。第一個(gè)模式匹配發(fā)生在數(shù)據(jù)為常量值1.6180時(shí),這是一個(gè)常量模式示例,第二個(gè)模式匹配中的null也是如此。當(dāng)匹配常置時(shí),使用==運(yùn)算符可以得到同樣的結(jié)果,但使用is運(yùn)算符更容易理解,更加友好。

    data變置中的最后兩個(gè)對(duì)象的類型分別為Cow和Chicken。類型模式在發(fā)現(xiàn)匹配的模式時(shí),會(huì)分配一個(gè)指定類型的新變量。例如,當(dāng)匹配Chicken時(shí),就會(huì)創(chuàng)建一個(gè)包含Chicken對(duì)象的新變量ch,這樣程序員就可以訪問(wèn)Chicken 類的屬性和方法,例如,naipe屬性和RunInCircles()方法。

    最后,對(duì)于不匹配代碼路徑中任何if...else if…語(yǔ)句的所有情況,可以使用var模式。然后使用catcher變量的GetType().Name屬性來(lái)獲取變量的類型。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部