C# 7.0 在兩種情況下引入了模式匹配:is 表達式和 switch 聲明。
模式測試一個值是否具有一定的形狀,並且可以從 具有匹配形狀時的值。
模式匹配為演算法提供了更簡潔的語法
您可以對任何資料類型(甚至是您自己的資料類型)執行模式匹配,而 if/else,你總是需要基元來匹配。
模式匹配可以從表達式中提取值。
模式匹配之前 -
範例public class PI{ public const float Pi = 3.142f; } public class Rectangle : PI{ public double Width { get; set; } public double height { get; set; } } public class Circle : PI{ public double Radius { get; set; } } class Program{ public static void PrintArea(PI pi){ if (pi is Rectangle){ Rectangle rectangle = pi as Rectangle; System.Console.WriteLine("Area of Rect {0}", rectangle.Width * rectangle.height); } else if (pi is Circle){ Circle c = pi as Circle; System.Console.WriteLine("Area of Circle {0}", Circle.Pi * c.Radius * c.Radius); } } public static void Main(){ Rectangle r1 = new Rectangle { Width = 12.2, height = 33 }; Rectangle r2 = new Rectangle { Width = 12.2, height = 44 }; Circle c1 = new Circle { Radius = 12 }; PrintArea(r1); PrintArea(r2); PrintArea(c1); Console.ReadLine(); } }
Area of Rect 402.59999999999997 Area of Rect 536.8 Area of Circle 452.44799423217773
模式匹配後 -
public class PI{ public const float Pi = 3.142f; } public class Rectangle : PI{ public double Width { get; set; } public double height { get; set; } } public class Circle : PI{ public double Radius { get; set; } } class Program{ public static void PrintArea(PI pi){ if (pi is Rectangle rectangle){ System.Console.WriteLine("Area of Rect {0}", rectangle.Width * rectangle.height); } else if (pi is Circle c){ System.Console.WriteLine("Area of Circle {0}", Circle.Pi * c.Radius * c.Radius); } } public static void Main(){ Rectangle r1 = new Rectangle { Width = 12.2, height = 33 }; Rectangle r2 = new Rectangle { Width = 12.2, height = 44 }; Circle c1 = new Circle { Radius = 12 }; PrintArea(r1); PrintArea(r2); PrintArea(c1); Console.ReadLine(); } }
Area of Rect 402.59999999999997 Area of Rect 536.8 Area of Circle 452.44799423217773#
以上是C# 7.0 中的模式匹配是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!