C# 7.0 ने पैटर्न मैचिंग पेश किया जो is एक्सप्रेशन और switch स्टेटमेंट में काम करता है। यह मान की "आकृति" की जांच करता है और मिलान होने पर जानकारी निकालता है।
पैटर्न मैचिंग के लाभ
- एल्गोरिदम के लिए अधिक संक्षिप्त सिंटैक्स
- किसी भी डेटा टाइप पर काम करता है (केवल प्रिमिटिव्स नहीं)
- एक्सप्रेशन से मान निकाल सकता है
- टाइप चेकिंग और कास्टिंग को एक चरण में जोड़ता है
पैटर्न मैचिंग से पहले
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);
}
}
पैटर्न मैचिंग के साथ (C# 7.0)
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);
}
}
Switch स्टेटमेंट में पैटर्न मैचिंग
public static void PrintArea(PI pi) {
switch (pi) {
case Rectangle r:
Console.WriteLine($"Rectangle: {r.Width * r.height}");
break;
case Circle c:
Console.WriteLine($"Circle: {Circle.Pi * c.Radius * c.Radius}");
break;
case null:
Console.WriteLine("Null shape");
break;
default:
Console.WriteLine("Unknown shape");
break;
}
}
पूर्ण उदाहरण
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) {
Console.WriteLine("Area of Rect {0}", rectangle.Width * rectangle.Height);
}
else if (pi is Circle c) {
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.6
Area of Rect 536.8
Area of Circle 452.448
बाद के संस्करणों में सुधार (C# 8.0+)
- Switch expressions (C# 8.0)
- प्रॉपर्टी पैटर्न्स:
case Person { Age: > 18 } - टुपल पैटर्न्स:
case (int x, int y) - पोजिशनल पैटर्न्स: डीकंस्ट्रक्टर के साथ