Wstęp
Pattern Matching to jedna z najciekawszych zmian, jakie zostały dodane do C#. Drastycznie zmienia podejście do sprawdzania warunków w kodzie. Zmiany, które się dzieją, trwają cały czas, ponieważ z każdą kolejną wersją języka są wprowadzane nowe usprawnienia.
Przykłady użycia
Pierwsze zmiany, jakie się pojawiły, to prosty sposób zmiany sposobu rzutowania typów. W nowym podejściu jesteśmy w stanie zadeklarować zmienną inline i jednocześnie wykonać rzutowanie:
object obj = "Jakub";
if (obj is string imie)
{
//var imie = (string)obj; - stare podejście
Console.WriteLine(imie.Length);
}
Kolejna zmiana to zaawansowany switch – to jest mój faworyt. Uwielbiam tę zmianę i przyznam się, że czasami to nawet jej nadużywam.
string GetDescription(object obj) => obj switch
{
int wiek => $"Twój wiek wynosi {wiek}",
string imie => $"Nazywasz się {imie}",
double waga => $"Twoja waga wynosi {waga}",
null => "Null object",
_ => "Unknown type"
};
Również jesteśmy w stanie wykorzystać pattern matching, korzystając z poszczególnych właściwości naszych obiektów.
static int GetDiscount(Product p)
{
return p switch
{
{ Price: < 10 } => 0,
{ Price: >= 10 and <= 500 } => 10,
{ Price: > 500 } => 20,
_ => throw new ArgumentException("Invalid product")
};
}
Podsumowanie
Patrząc na to, jakie możliwości nam dostarcza pattern matching, możemy bardzo poprawić jakość naszego kodu. Oczywiście do jakiegoś stopnia, bo jeśli przesadzimy, to na tej czytelności stracimy. Możemy praktycznie utworzyć każdy warunek, dodatkowo jeszcze możemy sprawdzać typy, co przydaje się przy dziedziczeniu obiektów. Możliwości są ogromne!