The article describes how pattern matching effectively utilizes and processes data in forms that weren’t part of the primary system. Prerequisites: Please review the articles below for a basic understanding of the C# 8.0 concepts required in this article. New Switch syntax with C# 8.0 Intro to Property Pattern — C# 8.0 Let’s get started Let’s take an example of Toll Calculator and see how pattern matching helps to write an algorithm for that. Entity class used throughout the article Example 1: Calculate toll fare as per the following conditions If the vehicle is Car => 100 Rs If the vehicle is DeliveryTruck => 200 Rs If the vehicle is Bus => 150 Rs If the vehicle is Taxi => 120 Rs Pattern matching program with new switch syntax If the vehicle type matches with Car 100 is returned & so on. Notice that the null & {} are default cases for the object type. Also, “_” can be used to program the default scenario. It’s a much more clean & efficient way of coding & it also recommends the use of single-letter variable names inside the switch syntax. public static int TollFare(Object vehicleType) => vehicleType switch { Car c => 100, DeliveryTruck d => 200, Bus b => 150, Taxi t => 120, null => 0, { } => 0 }; Test above program Test examples from a console application standpoint. The below code illustrates how to call the above pattern-matching function from the main method. var car = new Car(); var taxi = new Taxi(); var bus = new Bus(); var truck = new DeliveryTruck(); Console.WriteLine($"The toll for a car is {TollFare(car)}"); Console.WriteLine($"The toll for a taxi is {TollFare(taxi)}"); Console.WriteLine($"The toll for a bus is {TollFare(bus)}"); Console.WriteLine($"The toll for a truck is {TollFare(truck)}"); Console Output The toll for a car is 100 The toll for a taxi is 120 The toll for a bus is 150 The toll for a truck is 200 Example 2: Add occupancy pricing based on vehicle type Cars & taxis with “NO” passengers pay an extra 10 Rs. Cars & taxis with two passengers get a 10 Rs discount. Cars & taxis with three or more passengers get a 20 Rs discount. Buses that are less than 50% of passengers pay an extra 30 Rs. Buses with over 90% of passengers get a 40 Rs discount. Trucks over 5000 lbs are charged an extra 100 Rs. Light trucks under 3000 lbs, given a 20 Rs discount. Pattern Matching Switch Refer to pattern-matching syntax with single & multiple property classes. Link Pattern Matching — Car Entity Car { PassengerCount: 0 } => 100 + 10, Car { PassengerCount: 1 } => 100, Car { PassengerCount: 2 } => 100 - 10, Car c => 100 - 20, Pattern Matching — Taxi Entity Taxi {Fare:0 }=>100+10, Taxi { Fare: 1 } => 100, Taxi { Fare: 2 } => 100 - 10, Taxi t => 100 - 20, Pattern Matching — Bus Entity Bus b when ((double)b.RidersCount / (double)b.Capacity) < 0.50 => 150 + 30, Bus b when ((double)b.RidersCount / (double)b.Capacity) > 0.90 => 150 - 40, Bus b => 150, Pattern Matching — Delivery Truck Entity DeliveryTruck t when (t.Weight > 5000) => 200 + 100, DeliveryTruck t when (t.Weight < 3000) => 200 - 20, DeliveryTruck t => 200, Combining all entities The below example highlights the advantages of pattern matching: the pattern branches are compiled in order. The compiler also warns about the unreachable code. Test above program Test examples from a console application standpoint. The below code illustrates how to call the above pattern-matching function from the main method. var car1 = new Car{ PassengerCount=2}; var taxi1 = new Taxi { Fare = 0 }; var bus1 = new Bus { Capacity = 100, RidersCount = 30 }; var truck1 = new DeliveryTruck { Weight = 30000 }; Console.WriteLine($"The toll for a car is {OccupancyTypeTollFare(car1)}"); Console.WriteLine($"The toll for a taxi is {OccupancyTypeTollFare(taxi1)}"); Console.WriteLine($"The toll for a bus is {OccupancyTypeTollFare(bus1)}"); Console.WriteLine($"The toll for a truck is {OccupancyTypeTollFare(truck1)}"); Console Output The toll for a car is 90 The toll for a taxi is 110 The toll for a bus is 180 The toll for a truck is 300 “Pattern matching makes code more readable and offers an alternative to object-oriented techniques when you can’t add code to your classes.” Extended Property Pattern Property Pattern Extended C# GitHub Repo ssukhpinder/PropertyPatternExample Pattern matching in C# 8.0. Contribute to ssukhpinder/PropertyPatternExample development by creating an account on… github.com Also published here. If you liked this article, follow me on LinkedIn Instagram Facebook Twitter