Условие when
Ключевое слово when задаёт охрану для ветки
case в операторе
switch: сначала
сравнивают значение с case, затем проверяют
логическое выражение после when. Если охрана
ложна, поиск продолжается; при полном промахе
может сработать default.
Синтаксис
switch (выражение)
{
case значение when допУсловие:
// код
break;
}
Пример
Давайте сработаем на case 1 when num > 0:
using System;
class Program
{
static void Main()
{
int num = 1;
switch (num)
{
case 1 when num > 0:
Console.WriteLine("positive one");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"positive one"
Пример
Давайте отсеем ветку, когда охрана when ложна:
using System;
class Program
{
static void Main()
{
int num = 1;
switch (num)
{
case 1 when num < 0:
Console.WriteLine("never");
break;
case 1 when num > 0:
Console.WriteLine("positive one");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"positive one"
Пример
Давайте проверим длину строки в охране when:
using System;
class Program
{
static void Main()
{
string str = "abcde";
switch (str)
{
case "abcde" when str.Length == 5:
Console.WriteLine("exact");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"exact"
Пример
Давайте сравним число с порогом в двух охраняемых ветках:
using System;
class Program
{
static void Main()
{
int num = 5;
switch (num)
{
case var n when n > 10:
Console.WriteLine("big");
break;
case var n when n > 0:
Console.WriteLine("small positive");
break;
default:
Console.WriteLine("other");
break;
}
}
}
Результат выполнения кода:
"small positive"