Условный оператор ?: , известный как тернарный условный оператор, вычисляет логическое выражение и возвращает результат вычисления одного из двух выражений, в зависимости от того, чему равно значение логического выражения: true или false . The conditional operator ?: , commonly known as the ternary conditional operator, evaluates a Boolean expression, and returns the result of evaluating one of two expressions, depending on whether the Boolean expression evaluates to true or false . Начиная с C# 7.2, условное выражение REF возвращает ссылку на результат одного из двух выражений. Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.
Для условного оператора используется следующий синтаксис: The syntax for the conditional operator is as follows:
Выражение condition должно принимать значение true или false . The condition expression must evaluate to true or false . Если condition принимает значение true , вычисляется выражение consequent , а результат становится результатом операции. If condition evaluates to true , the consequent expression is evaluated, and its result becomes the result of the operation. Если condition принимает значение false , вычисляется выражение alternative , а результат становится результатом операции. If condition evaluates to false , the alternative expression is evaluated, and its result becomes the result of the operation. Вычисляется только выражение consequent или alternative . Only consequent or alternative is evaluated.
Параметры consequent и alternative должны быть одинакового типа, или должно существовать неявное преобразование из одного типа в другой. The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.
Условный оператор имеет правую ассоциативность, то есть выражение формы. The conditional operator is right-associative, that is, an expression of the form
вычисляется как is evaluated as
Вы можете использовать следующий мнемонический прием, чтобы запомнить, как оценивается условный оператор: You can use the following mnemonic device to remember how the conditional operator is evaluated:
В следующем примере иллюстрируется использование условного оператора: The following example demonstrates the usage of the conditional operator:
Содержание
- Условное выражение REF Conditional ref expression
- Условный оператор и оператор if..else Conditional operator and an if..else statement
- Возможность перегрузки оператора Operator overloadability
- Спецификация языка C# C# language specification
- Условный оператор if
- Тернарные операции
- Оператор ветвления switch (оператор множественного выбора)
- Оператор логического отрицания ! Logical negation operator !
- Оператор логического И & Logical AND operator &
- Оператор логического исключения ИЛИ ^ Logical exclusive OR operator ^
- Оператор логического ИЛИ | Logical OR operator |
- Условный оператор логического И && Conditional logical AND operator &&
- Условный оператор логического ИЛИ || Conditional logical OR operator ||
- Операторы, допускающие логическое значение NULL Nullable Boolean logical operators
- Составное присваивание Compound assignment
- Приоритет операторов Operator precedence
- Возможность перегрузки оператора Operator overloadability
- Спецификация языка C# C# language specification
Условное выражение REF Conditional ref expression
Начиная с C# 7.2, условное выражение REF можно использовать для того, чтобы вернуть ссылку на результат одного из двух выражений. Beginning with C# 7.2, you can use the conditional ref expression to return the reference to the result of one of the two expressions. Можно назначить эту ссылку ссылочной локальной переменной или ссылочной локальной переменной только для чтения или же использовать ее как возвращаемое ссылочное значение или как ref параметр метода. You can assign that reference to a ref local or ref readonly local variable, or use it as a reference return value or as a ref method parameter.
Для условного выражения REF используется следующий синтаксис: The syntax for the conditional ref expression is as follows:
Подобно исходному условному оператору, условное выражение REF вычисляет только одно из двух выражений: consequent или alternative . Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative .
Для условного выражения REF тип consequent и alternative должны совпадать. In the case of the conditional ref expression, the type of consequent and alternative must be the same.
В следующем примере иллюстрируется использование условного выражения REF: The following example demonstrates the usage of the conditional ref expression:
Дополнительные сведения см. в примечании к предлагаемой функции. For more information, see the feature proposal note.
Условный оператор и оператор if..else Conditional operator and an if..else statement
Если использовать условный оператор с оператором if-else, может получиться более лаконичный код в случаях, когда необходимо условно вычислить значение. Use of the conditional operator over an if-else statement might result in more concise code in cases when you need conditionally to compute a value. В следующем примере иллюстрируются два вида классификации целого числа как положительного или отрицательного: The following example demonstrates two ways to classify an integer as negative or nonnegative:
Возможность перегрузки оператора Operator overloadability
Условный оператор не может быть перегружен. The conditional operator cannot be overloaded.
Спецификация языка C# C# language specification
Дополнительные сведения см. в разделе Условный оператор статьи Предварительная спецификация C# 6.0. For more information, see the Conditional operator section of the C# language specification.
Рассмотрим подробнее структуру алгоритма «развилка».
Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма .
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Чаще всего для проверки условия используется условный оператор if .
Условный оператор if
Условный оператор if может использоваться в форме полной или неполной развилки.
| Неполная развилка | Полная развилка |
![]() | ![]() |
В случае неполной развилки если Условие истинно, то БлокОпераций1 выполняется, если Условие ложно, то БлокОпераций1 не выполняется.
В случае полной развилки если Условие истинно, то выполняется БлокОпераций1 , иначе выполняется БлокОпераций2 .
БлокОпераций может состоять из одной операции. В этом случае наличие фигурных скобок, ограничивающих блок, необязательно.
Результат выполнения 
Оператор if может быть вложенным.
Результат выполнения

При использовании вложенной формы оператора if опция else связывается с последним оператором if . Если требуется связать опцию else с предыдущим оператором if , внутренний условный оператор заключается в фигурные скобки:
Тернарные операции
Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си
Если выполняется Условие , то тернарная операция возвращает Выражение1 , в противном случае — Выражение2 .
Тернарные операции, как и операции условия, могут быть вложенными. Для разделения вложенных операций используются круглые скобки.
Приведенный выше пример с использованием тернарных операций можно представить в виде
Оператор ветвления switch (оператор множественного выбора)
Оператор if позволяет осуществить выбор только между двумя вариантами. Для того, чтобы производить выбор одного из нескольких вариантов необходимо использовать вложенный оператор if . С этой же целью можно использовать оператор ветвления switch .
Общая форма записи
Оператор ветвления switch выполняется следующим образом:
- вычисляется ЦелоеВыражение в скобках оператора switch ;
- полученное значение сравнивается с метками ( Константами ) в опциях case , сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
- выполняется БлокОпераций соответствующей метки case ;
- если соответствующая метка не найдена, то выполнится БлокОперацийПоУмолчанию , описанный в опции default .
Альтернатива default может отсутствовать, тогда не будет произведено никаких действий.
Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default .
Константы в опциях case должны быть целого типа (могут быть символами).
Следующие операторы выполняют логические операции с использованием логических операндов: The following operators perform logical operations with the bool operands:
- Унарный ! (логическое отрицание) оператор. Unary ! (logical negation) operator.
- Бинарные & (логическое И), | (логическое ИЛИ), а также ^ (логическое исключающее ИЛИ) операторы. Binary & (logical AND), | (logical OR), and ^ (logical exclusive OR) operators. Эти операторы всегда обрабатывают оба операнда. Those operators always evaluate both operands.
- Бинарные && (условное логическое И) и || (условное логическое ИЛИ) операторы. Binary && (conditional logical AND) and || (conditional logical OR) operators. Эти операторы вычисляют правый операнд, только если это необходимо. Those operators evaluate the right-hand operand only if it’s necessary.
Для операндов целочисленных типов операторы & , | и ^ выполняют побитовые логические операции. For the operands of the integral types, the & , | , and ^ operators perform bitwise logical operations. Дополнительные сведения см. в разделе Побитовые операторы и операторы сдвига. For more information, see Bitwise and shift operators.
Оператор логического отрицания ! Logical negation operator !
Унарный префиксный оператор ! выполняет логическое отрицание операнда, The unary prefix ! operator computes logical negation of its operand. возвращая true , если операнд имеет значение false , и false , если операнд имеет значение true . That is, it produces true , if the operand evaluates to false , and false , if the operand evaluates to true :
Начиная с C# 8.0, унарный постфиксный оператор ! допускает значение NULL. Starting with C# 8.0, the unary postfix ! operator is the null-forgiving operator.
Оператор логического И & Logical AND operator &
Оператор & вычисляет логическое И для всех своих операндов. The & operator computes the logical AND of its operands. Результат операции x & y принимает значение true , если оба оператора x и y имеют значение true . The result of x & y is true if both x and y evaluate to true . В противном случае результат будет false . Otherwise, the result is false .
Оператор & вычисляет оба операнда, даже если левый операнд имеет значение false и результат должен принять значение false , независимо от значения правого операнда. The & operator evaluates both operands even if the left-hand operand evaluates to false , so that the result must be false regardless of the value of the right-hand operand.
В следующем примере правый операнд оператора & является вызовом метода, который выполняется независимо от значения левого операнда: In the following example, the right-hand operand of the & operator is a method call, which is performed regardless of the value of the left-hand operand:
Условный оператор логического И && также вычисляет логическое И для своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение false . The conditional logical AND operator && also computes the logical AND of its operands, but doesn’t evaluate the right-hand operand if the left-hand operand evaluates to false .
Для операндов целочисленного типа оператор & вычисляет побитовое логическое И своих операндов. For the operands of the integral types, the & operator computes the bitwise logical AND of its operands. Унарный оператор & является оператором AddressOf. The unary & operator is the address-of operator.
Оператор логического исключения ИЛИ ^ Logical exclusive OR operator ^
Оператор ^ вычисляет логическое исключение ИЛИ для всех своих операндов, The ^ operator computes the logical exclusive OR, also known as the logical XOR, of its operands. возвращая true для x ^ y , если x имеет значение true и y имеет значение false или x имеет значение false и y имеет значение true . The result of x ^ y is true if x evaluates to true and y evaluates to false , or x evaluates to false and y evaluates to true . В противном случае результат будет false . Otherwise, the result is false . То есть для операндов bool оператор ^ возвращает тот же результат, что и оператор неравенства != . That is, for the bool operands, the ^ operator computes the same result as the inequality operator != .
Для операндов целочисленного типа оператор ^ вычисляет побитовое логическое исключающее ИЛИ своих операндов. For the operands of the integral types, the ^ operator computes the bitwise logical exclusive OR of its operands.
Оператор логического ИЛИ | Logical OR operator |
Оператор | вычисляет логическое ИЛИ для всех своих операндов. The | operator computes the logical OR of its operands. Результат операции x | y принимает значение true , если хотя бы один из операторов x или y имеет значение true . The result of x | y is true if either x or y evaluates to true . В противном случае результат будет false . Otherwise, the result is false .
Оператор | вычисляет оба операнда, даже если левый операнд имеет значение true и результат должен принять значение true , независимо от значения правого операнда. The | operator evaluates both operands even if the left-hand operand evaluates to true , so that the result must be true regardless of the value of the right-hand operand.
В следующем примере правый операнд оператора | является вызовом метода, который выполняется независимо от значения левого операнда: In the following example, the right-hand operand of the | operator is a method call, which is performed regardless of the value of the left-hand operand:
Условный оператор логического ИЛИ || также вычисляет логическое ИЛИ для своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение true . The conditional logical OR operator || also computes the logical OR of its operands, but doesn’t evaluate the right-hand operand if the left-hand operand evaluates to true .
Для операндов целочисленного типа оператор | вычисляет побитовое логическое ИЛИ своих операндов. For the operands of the integral types, the | operator computes the bitwise logical OR of its operands.
Условный оператор логического И && Conditional logical AND operator &&
Условный оператор логического И && (оператор короткого замыкания) вычисляет логическое И для своих операндов. The conditional logical AND operator && , also known as the "short-circuiting" logical AND operator, computes the logical AND of its operands. Результат операции x && y принимает значение true , если оба оператора x и y имеют значение true . The result of x && y is true if both x and y evaluate to true . В противном случае результат будет false . Otherwise, the result is false . Если x имеет значение false , y не вычисляется. If x evaluates to false , y is not evaluated.
В следующем примере правый операнд оператора && является вызовом метода, который не выполняется, если левый операнд имеет значение false : In the following example, the right-hand operand of the && operator is a method call, which isn’t performed if the left-hand operand evaluates to false :
Оператор логического И & также вычисляет логическое И для своих операндов, но он всегда вычисляет оба операнда. The logical AND operator & also computes the logical AND of its operands, but always evaluates both operands.
Условный оператор логического ИЛИ || Conditional logical OR operator ||
Условный оператор логического ИЛИ || (оператор короткого замыкания) вычисляет логическое ИЛИ для своих операндов. The conditional logical OR operator || , also known as the "short-circuiting" logical OR operator, computes the logical OR of its operands. Результат операции x || y принимает значение true , если хотя бы один из операторов x или y имеет значение true . The result of x || y is true if either x or y evaluates to true . В противном случае результат будет false . Otherwise, the result is false . Если x имеет значение true , y не вычисляется. If x evaluates to true , y is not evaluated.
В следующем примере правый операнд оператора || является вызовом метода, который не выполняется, если левый операнд имеет значение true : In the following example, the right-hand operand of the || operator is a method call, which isn’t performed if the left-hand operand evaluates to true :
Оператор логического ИЛИ | также вычисляет логическое ИЛИ для своих операндов, но всегда вычисляет оба операнда. The logical OR operator | also computes the logical OR of its operands, but always evaluates both operands.
Операторы, допускающие логическое значение NULL Nullable Boolean logical operators
Для операндов bool? операторы & и | поддерживают троичную логику. For the bool? operands, the & and | operators support the three-valued logic. Семантика этих операторов определяется по следующей таблице: The semantics of these operators is defined by the following table:
| п x | y y | x&y x&y | x|y x|y |
|---|---|---|---|
| true true | true true | true true | true true |
| true true | Ложь false | false false | true true |
| true true | null null | null null | true true |
| Ложь false | true true | Ложь false | true true |
| Ложь false | Ложь false | Ложь false | Ложь false |
| Ложь false | null null | Ложь false | null null |
| null null | true true | null null | true true |
| null null | Ложь false | Ложь false | null null |
| null null | null null | null null | null null |
Поведение этих операторов отличается от типичного поведения операторов, допускающих значение NULL. The behavior of those operators differs from the typical operator behavior with nullable value types. Как правило, оператор, который определяется для операндов типа значения, можно также использовать с соответствующими операндами типа, допускающего значение NULL. Typically, an operator which is defined for operands of a value type can be also used with operands of the corresponding nullable value type. Такой оператор возвращает null , если какой-либо из операндов имеет значение null . Such an operator produces null if any of its operands is null . При этом операторы & и | могут возвращать отличное от NULL значение, даже если один из операндов имеет значение null . However, the & and | operators can produce non-null even if one of the operands is null . См. подробнее о поведении операторов, допускающих значение NULL, в руководстве по использованию типов, допускающих значение NULL. For more information about the operator behavior with nullable value types, see the Operators section of the Using nullable value types article.
Вы также можете также использовать операторы ! и ^ с операндами bool? , как показано в следующем примере: You can also use the ! and ^ operators with the bool? operands, as the following example shows:
Условные логические операторы && и || не поддерживают операнды типа bool? . The conditional logical operators && and || don’t support the bool? operands.
Составное присваивание Compound assignment
Для бинарного оператора op выражение составного присваивания в форме For a binary operator op , a compound assignment expression of the form
эквивалентно is equivalent to
за исключением того, что x вычисляется только один раз. except that x is only evaluated once.
Операторы & , | и ^ поддерживают составное присваивание, как показано в следующем примере: The & , | , and ^ operators support compound assignment, as the following example shows:
Условные логические операторы && и || не поддерживают составное присваивание. The conditional logical operators && and || don’t support compound assignment.
Приоритет операторов Operator precedence
В следующем списке перечислены логические операторы в порядке убывания приоритета: The following list orders logical operators starting from the highest precedence to the lowest:
- Оператор логического отрицания ! Logical negation operator !
- Оператор логического И & Logical AND operator &
- Оператор логического исключающего ИЛИ ^ Logical exclusive OR operator ^
- Оператор логического ИЛИ | Logical OR operator |
- Условный оператор логического И && Conditional logical AND operator &&
- Условный оператор логического ИЛИ || Conditional logical OR operator ||
Порядок вычисления, определяемый приоритетом операторов, можно изменить с помощью скобок ( () ). Use parentheses, () , to change the order of evaluation imposed by operator precedence:
Полный список операторов C#, упорядоченных по уровню приоритета, см. в статье Операторы C#. For the complete list of C# operators ordered by precedence level, see C# operators.
Возможность перегрузки оператора Operator overloadability
Определяемый пользователем тип может перегружать операторы ! , & , | и ^ . A user-defined type can overload the ! , & , | , and ^ operators. При перегрузке бинарного оператора соответствующий оператор составного присваивания также неявно перегружается. When a binary operator is overloaded, the corresponding compound assignment operator is also implicitly overloaded. Определяемый пользователем тип не может перегружать оператор составного присваивания явным образом. A user-defined type cannot explicitly overload a compound assignment operator.
Определяемый пользователем тип не может перегружать условные логические операторы && и || . A user-defined type cannot overload the conditional logical operators && and || . При этом, если определяемый пользователем тип каким-либо образом перегружает операторы true и false и операторы & и | , операция && или || может быть применена для операндов этого типа. However, if a user-defined type overloads the true and false operators and the & or | operator in a certain way, the && or || operation, respectively, can be evaluated for the operands of that type. Дополнительные сведения см. в разделе Пользовательские условные логические операторы в Спецификации языка C#. For more information, see the User-defined conditional logical operators section of the C# language specification.
Спецификация языка C# C# language specification
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#: For more information, see the following sections of the C# language specification:







