C# 9: Verbessertes “Pattern Matching”

Last Updated on 13. September 2021 by Thomas J. Fehr

Relational Patterns

Ab C# 9 können Werte mit Relational Patterns geprüft werden:

<kleiner als
>grösser als
<=kleiner oder gleich
>=grösser oder gleich

Dazu nun ein Code Beispiel:

using System;

namespace ConsoleApp2
{
    class Program
    {
        public class Animal
        {
            public string Name { get; set; }
            public int Weight { get; set; }
            public int YearOfBirth { get; set; }
        }

        static void Main(string[] args)
        {
            var animal = new Animal()
            {
                Name = "Tiger"
                ,Weight = 300
                ,YearOfBirth = 2016
            };

            if (animal is Animal { Weight: > 200 } animalWeightMoreThen200)
            {
                Console.WriteLine($"Animal is more then 200kg! " +
                    $"Weight: {animalWeightMoreThen200.Weight}kg");
            }
        }
    }
}

Wir haben ein Objekt Animal. Bevor wir mit diesem Objekt arbeiten, prüfen wir, ob es vom Typ Animal ist. Mit einem “Relational Pattern” können wir nun auch sicherstellen, dass unser Tier mehr als 200 kg wiegt, bevor wir damit arbeiten.

Pattern Combinators

Seit C# 9 haben wir nun auch die Möglichkeit mehrere Patterns zu kombinieren. Dazu haben wir folgende Möglichkeiten:

andund
oroder
notnicht

Dazu nun ein Code Beispiel:

using System;

namespace ConsoleApp2
{
    class Program
    {
        public class Animal
        {
            public string Name { get; set; }
            public int Weight { get; set; }
            public int YearOfBirth { get; set; }
        }

        static void Main(string[] args)
        {
            var animal = new Animal()
            {
                Name = "Tiger"
                , Weight = 299
                , YearOfBirth = 2016
            };

            if (animal is Animal { Weight: > 200 and < 300, 
                Name: "Tiger" } tigerWeightBetween200And300)
            {
                Console.WriteLine($"The tiger weight is between 200kg and 300kg! " +
                    $"Weight: {tigerWeightBetween200And300.Weight}kg");
            }
        }
    }
}

Wir haben ein Objekt Animal. Bevor wir mit diesem Objekt arbeiten, prüfen wir, ob es vom Typ Animal ist. Mit den kombinierten “Relational Patterns” können wir nun auch sicherstellen, dass unser Tier mehr als 200 kg und weniger als 300 kg wiegt und der Name Tiger ist, bevor wir damit arbeiten.

Nützliche Links

Microsoft docs: Pattern matching enhancements

C# 9.0: Improved Pattern Matching

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert