Pattern-matching — это функциональность языка, позволяющая
проверять объект на
соответствие определённому шаблону и выполнять действия, если объект удовлетворяет этим условиям. Этот механизм помогает писать более читабельный и компактный код, устраняя необходимость в громоздких конструкциях вроде if-else или switch.
Паттерн-матчинг в C# активно развивается с каждой новой версией языка и поддерживает множество типов паттернов, таких как:
1️⃣ Проверка типа
Используется для проверки типа объекта и его преобразования в этом же выражении.
object obj = "Hello, world!";
if (obj is string str)
{
Console.WriteLine($"Длина строки: {str.Length}");
}
2️⃣ Константные паттерны
Проверяет значение переменной на соответствие константе.
int number = 42;
if (number is 42)
{
Console.WriteLine("Число равно 42");
}
3️⃣ Реляционные и логические паттерны
Сравнивает значения и комбинирует паттерны с помощью логических операторов (and, or, not).
int age = 25;
if (age is > 18 and < 30)
{
Console.WriteLine("Возраст в диапазоне от 18 до 30");
}
4️⃣ Паттерны в выражении switch
Улучшает конструкцию switch, позволяя использовать сложные условия.
object shape = new Circle { Radius = 5 };
string description = shape switch
{
Circle { Radius: > 0 } c => $"Круг с радиусом {c.Radius}",
Rectangle { Width: > 0, Height: > 0 } r => $"Прямоугольник {r.Width}x{r.Height}",
_ => "Неизвестная форма"
};
5️⃣ Свойственные паттерны
Позволяют проверять свойства объекта.
Person person = new Person { Name = "Alice", Age = 30 };
if (person is { Name: "Alice", Age: > 25 })
{
Console.WriteLine("Это Алиса старше 25 лет");
}
6️⃣ Список и позиционные паттерныИспользуются для проверки списков и кортежей.
int[] numbers = { 1, 2, 3 };
if (numbers is [1, 2, 3])
{
Console.WriteLine("Массив содержит 1, 2, 3");
}
🐸Библиотека шарписта