Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Tip
Эта статья является частью раздела "Основы" для разработчиков , которые уже знают хотя бы один язык программирования и учат C#. Если вы не знакомы с программированием, сначала начните с учебных пособий по началу работы. Полный синтаксис см. в инструкциях выбора в справочнике по языку.
Вы пришли из другого языка? C++, Java и JavaScript во многом унаследовали C, поэтому if, else и switch в C# читаются одинаково. Стоит отметить одно различие: C# запрещает переход без `break` между непустыми вариантами switch, и каждая метка case может проверять шаблон, а не только константу. Если вы переходите с Python, то if/else if/else в C# соответствует if/elif/else, а основанный на шаблонах switch в C# ближе всего к оператору match в Python.
Операторы выбора определяют, какой блок кода будет выполняться на основе условия. C# предоставляет два варианта: if (с необязательным else) для ветвления по логическому значению и switch для сравнения одного значения с несколькими случаями.
Логическое выражение — это любое выражение, которое принимает значение true или false, например выражение сравнения temperature >= 25.
Ветвь с if и else
Оператор if выполняет свой блок только тогда, когда его логическое выражение имеет значение true.
else Добавьте блок для предоставления кода, выполняемого при условииfalse:
int temperature = 28;
// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
Console.WriteLine("Warm"); // => Warm
}
else
{
Console.WriteLine("Cool");
}
Тело if или else состоит из одного оператора, например присваивания или вызова метода.
Блочная инструкция сама по себе является одной инструкцией, которая заключает в фигурные скобки ({ }) ноль или более инструкций.
Многие стандарты программирования рекомендуют заключать тела ветви в фигурные скобки даже для одной инструкции. Фигурные скобки явно задают область видимости. Это предотвращает распространённую ошибку: когда позже добавляют вторую строку, рассчитывая, что она будет выполняться условно, но вместо этого она выполняется безусловно. Только фигурные скобки определяют, какие инструкции относятся к ветке. C# не считает пробельные символы значимыми, поэтому сами по себе отступы тоже никогда не имеют значения. Фигурные скобки допустимы даже для одной строки: блок представляет собой единственную инструкцию, которую выполняет эта ветка. Используйте отступы в коде для удобочитаемости, но определяйте блок с помощью фигурных скобок.
Тестирование нескольких условий с помощью else if
Чтобы выбрать один из более чем двух путей, объедините условия с помощью else if. C# вычисляет каждое условие в порядке и запускает первый блок, условие которого равно true, а затем пропускает остальные. Последний else обрабатывает каждый оставшийся случай:
int score = 82;
// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else if (score >= 70)
{
grade = "C";
}
else
{
grade = "F";
}
Console.WriteLine(grade); // => B
Порядок имеет значение в цепочке. Так как первое соответствующее условие выигрывает, поместите в первую очередь самые конкретные условия. В предыдущем примере проверка score >= 80 перед score >= 70 гарантирует, что оценка 82 будет сопоставлена с "B", а не с "C".
Сопоставить значение с помощью инструкции switch
Когда вы сравниваете одно значение со многими отдельными случаями, конструкция switch воспринимается понятнее, чем длинная цепочка else if. Подобно if, оператор switch является оператором ветвления: он определяет, какой код выполнять. Каждая case метка содержит значение, соответствующее, и каждый case раздел заканчивается оператором break . Сгруппируйте метки, чтобы они использовали один общий блок, и используйте раздел default для значений, которые не соответствуют ни одному варианту:
DayOfWeek day = DayOfWeek.Saturday;
// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("Weekend"); // => Weekend
break;
default:
Console.WriteLine("Weekday");
break;
}
В отличие от C и Java, C# не допускает перехода управления из одной непустой секции case в следующую. Каждый раздел, содержащий код, должен заканчиваться на break (или другим оператором перехода, например return или goto). Это правило предотвращает случайные ошибки, распространенные на этих языках.
Тестовые шаблоны с помощью case и when
Метка case не ограничивается константами. Он может протестировать шаблон, который является правилом, описывающим форму или значение данных. Реляционный шаблон, < 0 например соответствует любому значению меньше нуля. Добавьте конструкцию when, чтобы указать дополнительное условие, которое также должно быть true, чтобы случай совпал:
int measurement = 42;
// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
case < 0:
Console.WriteLine("Negative");
break;
case 0:
Console.WriteLine("Zero");
break;
case > 0 when measurement % 2 == 0:
Console.WriteLine("Positive and even"); // => Positive and even
break;
default:
Console.WriteLine("Positive and odd");
break;
}
Варианты на основе шаблонов оцениваются сверху вниз, поэтому более конкретные шаблоны относятся к более общим. Полный каталог шаблонов см. в разделе "Сопоставление шаблонов".
Выбрать значение с помощью выражения
Операторы if и switch определяют, какой код выполняется. Если вместо этого нужно выбрать значение, используйте выражение. Выражение вычисляет значение, поэтому его можно использовать в любом месте, где ожидается значение, например справа от назначения или аргумента метода. C# предлагает формы выражений, которые выбирают значение из альтернативных вариантов, таких как условный оператор и switch выражение.
Условный оператор ?:
Условный оператор ?: выбирает одно из двух значений на основе логического условия.
О его синтаксисе, поведении при коротком замыкании и рекомендациях по его выбору вместо if/else см. в разделе Условный оператор ?:.
выражение switch
Выражение switch — это эквивалент инструкции switch в форме выражения. Вместо выполнения кода для соответствующего случая он вычисляет значение. Это короче, чем присваивать значение в каждой ветви инструкции switch, и компилятор предупреждает, если ветви не охватывают все возможные входные значения. Выражение switch является основной частью сопоставления шаблонов. Чтобы узнать, когда и как использовать его, см. сопоставление шаблонов и ссылку switch на выражение .