C# 使用is運(yùn)算符模式表達(dá)式進(jìn)行模式匹配
由于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)獲取變量的類型。
點(diǎn)擊加載更多評(píng)論>>