Реляционные и логические шаблоны
Объединяйте условия в шаблонах.
«Реляционные и логические шаблоны» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Реляционные шаблоны
Реляционный шаблон сравнивает входное значение с константой с помощью <, >, <= или >=. Он соответствует значению, если сравнение истинно.
Реляционные шаблоны появились в C# 9 и позволяют кратко записывать проверки диапазонов в ветвях выражений выбора и выражениях is, не создавая явные сравнения.
int temp = 18;
string level = temp switch
{
< 0 => "freezing",
< 15 => "cold",
< 25 => "mild",
_ => "hot"
};
System.Console.WriteLine(level);Реляционные шаблоны с проверкой
Реляционные шаблоны также работают в выражениях is, позволяя создавать понятные логические проверки.
n is > 0 почти читается как обычная фраза и возвращает логическое значение, которое можно использовать в условиях, присваиваниях или предикатах LINQ.
using System;
class Program {
static void Main() {
int score = 82;
bool passed = score is >= 60;
Console.WriteLine(passed);
}
}Шаблон «и»
Логический шаблон and требует соответствия обоих вложенных шаблонов. Он идеально подходит для ограниченных диапазонов.
>= 1 and <= 12 соответствует значениям в диапазоне от 1 до 12 включительно. Без and выразить две границы в одном шаблоне было бы невозможно.
int month = 6;
bool valid = month is >= 1 and <= 12;
System.Console.WriteLine(valid);Шаблон «или»
Логический шаблон or соответствует значению, если ему соответствует хотя бы один из вложенных шаблонов. Он объединяет альтернативные значения в одну ветвь.
Вместо повторения ветвей для связанных случаев конструкция 'a' or 'e' or 'i' объединяет их. Благодаря этому выражения выбора остаются компактными и ясно передают замысел.
char c = 'e';
string kind = c switch
{
'a' or 'e' or 'i' or 'o' or 'u' => "vowel",
_ => "consonant"
};
System.Console.WriteLine(kind);Шаблон «не»
Логический шаблон not соответствует значению, если его вложенный шаблон не соответствует. Чаще всего он используется в конструкции not null.
Он также отрицает другие шаблоны, например not 0 или not (> 100), позволяя ясно выражать исключения внутри одной ветви.
object? value = "hi";
if (value is not null)
System.Console.WriteLine("present");Сочетание логических шаблонов
Логические шаблоны можно комбинировать. С помощью and, or и not можно создавать сложные условия, используя скобки для управления приоритетом.
Приоритет следующий: not связывает сильнее всего, затем идёт and, затем or. Добавляйте скобки, когда смысл может быть неоднозначным.
using System;
class Program {
static string Classify(int n) => n switch {
< 0 or > 100 => "out of range",
>= 0 and <= 50 => "low half",
_ => "high half"
};
static void Main() => Console.WriteLine(Classify(75));
}Диапазоны оценок
Реляционные и логические шаблоны вместе позволяют ясно описывать классические таблицы оценивания.
Поскольку ветви проверяются сверху вниз, можно использовать простые верхние границы или объединять границы с помощью and для явного задания диапазонов. Оба подхода допустимы — выбирайте более понятный.
using System;
class Program {
static char Grade(int s) => s switch {
>= 90 => 'A',
>= 80 and < 90 => 'B',
>= 70 and < 80 => 'C',
_ => 'F'
};
static void Main() => Console.WriteLine(Grade(85));
}Проверка отсутствующего значения с шаблонами свойств
Сочетание not null с шаблонами типов и свойств создаёт безопасные и выразительные защитные условия.
Конструкция obj is Person { Name: not null } p соответствует ненулевому Person, у которого Name также не равно null, и связывает его с переменной. Это избавляет от каскада проверок отсутствующих значений.
record Person(string? Name);
object obj = new Person("Kai");
if (obj is Person { Name: not null } p)
System.Console.WriteLine(p.Name);Отрицание диапазонов
Группу реляционных условий можно отрицать с помощью not и скобок, чтобы выразить исключения.
not (>= 1 and <= 5) соответствует любому значению за пределами диапазона от 1 до 5. Для некоторых читателей это понятнее, чем равнозначная запись < 1 or > 5.
using System;
class Program {
static void Main() {
int n = 9;
bool outside = n is not (>= 1 and <= 5);
Console.WriteLine(outside);
}
}Сочетание с шаблонами типов
Логические шаблоны можно объединять и с шаблонами типов. o is int or long сопоставляет целые числовые типы одной проверкой.
Это удобно, когда несколько связанных типов нужно обрабатывать одинаково. Обратите внимание: обе части or должны быть совместимы со способом использования результата.
object o = 5L;
string kind = o switch
{
int or long => "integral",
float or double => "floating",
_ => "other"
};
System.Console.WriteLine(kind);Рекомендации по читаемости
Логические шаблоны выразительны, но могут получаться слишком громоздкими. Делайте ветви короткими, по возможности используйте диапазоны с and, а при сочетании and/or ставьте скобки для ясности.
Если условие содержит много частей или внешние переменные, защитное условие when может читаться лучше, чем длинный логический шаблон. Выбирайте вариант, который лучше передаёт замысел.
int n = 42;
string r = n switch
{
> 0 and < 10 when n % 2 == 0 => "small even",
_ => "other"
};
System.Console.WriteLine(r);Быстрая проверка
Проверьте, насколько Вы поняли реляционные и логические шаблоны.
Итоги
Реляционные шаблоны (< > <= >=) сравнивают значения с константами. Логические шаблоны объединяют вложенные шаблоны с помощью and, or и not.
Приоритет имеют not, затем and, затем or; при смешивании используйте скобки. Далее мы рассмотрим шаблоны списков и кортежей.
Изучай C# с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 93
- Уроки
- 346
Часто задаваемые вопросы
Урок «Реляционные и логические шаблоны» бесплатный?
Да — полный текст урока «Реляционные и логические шаблоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Реляционные и логические шаблоны»?
Объединяйте условия в шаблонах. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Реляционные и логические шаблоны»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выражения switch
- Шаблоны типов и свойств
- Реляционные и логические шаблоны
- Шаблоны списков и кортежей