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

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

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

    由于is運算符通常會實現(xiàn)許多if…else if…語句,因此switch case方法是一種更優(yōu)雅的模式匹配方法。隨著要進(jìn)行模式匹配的場景増加,使用if...else if…語句會使代碼更長、層次更深、更不易閱讀。如果出現(xiàn)這種情況,記住你還可以選擇使用switch case模式匹配。不過,對于較小的代碼段,is運算符是進(jìn)行模式匹配和過濾數(shù)據(jù)集的一種非常有效且強大的技術(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變量中的對象包含幾種不同的類型。使用foreach語句迭代object[]數(shù)組時,可以使用is運算符査看該變量的類型,當(dāng)發(fā)現(xiàn)匹配時,就執(zhí)行相應(yīng)的操作。第一個模式匹配發(fā)生在數(shù)據(jù)為常量值1.6180時,這是一個常量模式示例,第二個模式匹配中的null也是如此。當(dāng)匹配常置時,使用==運算符可以得到同樣的結(jié)果,但使用is運算符更容易理解,更加友好。

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

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

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

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