C# 使用is運算符模式表達式進行模式匹配
由于is運算符通常會實現(xiàn)許多if…else if…語句,因此switch case方法是一種更優(yōu)雅的模式匹配方法。隨著要進行模式匹配的場景増加,使用if...else if…語句會使代碼更長、層次更深、更不易閱讀。如果出現(xiàn)這種情況,記住你還可以選擇使用switch case模式匹配。不過,對于較小的代碼段,is運算符是進行模式匹配和過濾數(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運算符査看該變量的類型,當發(fā)現(xiàn)匹配時,就執(zhí)行相應的操作。第一個模式匹配發(fā)生在數(shù)據(jù)為常量值1.6180時,這是一個常量模式示例,第二個模式匹配中的null也是如此。當匹配常置時,使用==運算符可以得到同樣的結(jié)果,但使用is運算符更容易理解,更加友好。
data變置中的最后兩個對象的類型分別為Cow和Chicken。類型模式在發(fā)現(xiàn)匹配的模式時,會分配一個指定類型的新變量。例如,當匹配Chicken時,就會創(chuàng)建一個包含Chicken對象的新變量ch,這樣程序員就可以訪問Chicken 類的屬性和方法,例如,naipe屬性和RunInCircles()方法。
最后,對于不匹配代碼路徑中任何if...else if…語句的所有情況,可以使用var模式。然后使用catcher變量的GetType().Name屬性來獲取變量的類型。
點擊加載更多評論>>