Позиционный паттерн
Шаблон в круглых скобках сравнивает части
значения по позиции: pair is (1, 2)
для кортежа или записи с
Deconstruct.
Отдельные позиции можно заменить
_
или вложенным шаблоном. Работает с
is и
switch.
Синтаксис
значение is (шаблон1, шаблон2)
case (шаблон1, шаблон2):
Пример
Давайте проверить кортеж (1, 2)
позиционным шаблоном:
using System;
class Program
{
static void Main()
{
(int a, int b) pair = (1, 2);
bool res = pair is (1, 2);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте связать имена с элементами при совпадении:
using System;
class Program
{
static void Main()
{
(int a, int b) pair = (3, 4);
if (pair is (var x, var y))
{
Console.WriteLine($"{x} {y}");
}
}
}
Результат выполнения кода:
3 4
Пример
Давайте сопоставить запись Point
по координатам:
using System;
record Point(int X, int Y);
class Program
{
static void Main()
{
Point p = new Point(1, 2);
if (p is (1, 2))
{
Console.WriteLine("on pair");
}
}
}
Результат выполнения кода:
"on pair"
Пример
Давайте отбросить второй элемент
шаблоном (1, _):
using System;
class Program
{
static void Main()
{
(int a, int b) pair = (1, 5);
bool res = pair is (1, _);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
деконструкция
на части,
которая раскладывает значение на переменные -
паттерн
свойства,
который сопоставляет по именам полей -
паттерн
отбрасывания,
который пропускает позиции в скобках -
паттерн
списка,
который сопоставляет элементы по порядку