Паттерн свойства
Запись str is { Length: 5 } проверяет
свойство Length у строки. Внутри
скобок перечисляют имена членов и вложенные
шаблоны; можно комбинировать с
логическими
и var-шаблонами,
например { Length: > 0 and var n }.
Применяют с is
и в switch.
Синтаксис
значение is { ИмяСвойства: шаблон }
значение is тип { Имя: шаблон, Имя2: шаблон }
Пример
Давайте проверить длину строки "abcde":
using System;
class Program
{
static void Main()
{
string str = "abcde";
bool res = str is { Length: 5 };
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте сузить тип и проверить поле в одном шаблоне:
using System;
class Program
{
static void Main()
{
object obj = "12345";
if (obj is string { Length: 5 })
{
Console.WriteLine("len 5");
}
}
}
Результат выполнения кода:
"len 5"
Пример
Давайте сохранить длину через вложенный
шаблон var n:
using System;
class Program
{
static void Main()
{
string str = "abcde";
if (str is { Length: > 0 and var n })
{
Console.WriteLine(n);
}
}
}
Результат выполнения кода:
5
Пример
Давайте выбрать ветку в switch
по свойству записи:
using System;
record Pair(int A, int B);
class Program
{
static void Main()
{
Pair p = new Pair(1, 2);
switch (p)
{
case { A: 1, B: 2 }:
Console.WriteLine("match");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"match"
Смотрите также
-
позиционный паттерн
по позиции,
который сопоставляет части по порядку -
паттерн
типа,
который часто стоит перед фигурными скобками -
выражение
with,
которое копирует запись с новыми полями -
логический паттерн
и, или, не,
который связывает шаблоны внутри поля