# Build algorithms with pattern matching | Real World Example

In this post I will show you a very powerfull feature of C# 9.0 pattern matching. Pattern matching provides more concise syntax for algorithms you already use today. You already create pattern matching algorithms using existing syntax. You write if or switch statements that test values

Let’s take a look at the FizzBuzz problem, which is a common interview question. I’ll start by writing the code in switch statements, then convert it to pattern matching.


void Main()
{
FizzBuzzSwitchCase();
}


public void FizzBuzzSwitchCase()
{
for (int i = 0; i <= 10000; i++)
{
FizzBuzzSwitchCase(i);

}
}


public void FizzBuzzSwitchCase(int i)
{
switch (true)
{
case var FizzBuzz when (i % 15 == 0):
Console.WriteLine("fizzbuzz");
break;
case var Fizz when (i % 3 == 0):
Console.WriteLine("fizz");
break;
case var Buzz when (i % 5 == 0):
Console.WriteLine("buzz");
break;
default:
Console.WriteLine(i);
break;
}
}


Let’s now translate the switch statement to a pattern matching statement. Here’s the code: The syntax I’m using is pattern matching. Let’s take a closer look at each line

• If all conditions are satisfied, the outcome is (0,0).
• (0,_) if the first condition is met (ignore second one)
• (_,0) If the second condition is met
• _ if none of them are matching
void FizzBuzzUsingPatternMatch(int i)
{
var result= (i % 3, i % 5) switch
{
(0, 0) => "fizzbuzz",
(0, _) => "fizz",
(_, 0) => "buzz",
_ => i.ToString()

};
Console.WriteLine(result);
}

Reactions