title | description | ms.date | f1_keywords | helpviewer_keywords | |||||
---|---|---|---|---|---|---|---|---|---|
?: operator - the ternary conditional operator |
Learn about the C# ternary conditional operator, (`?:`), that returns the result of one of the two expressions based on a Boolean expression's result. |
11/29/2022 |
|
|
The conditional operator ?:
, also known as the ternary conditional operator, evaluates a Boolean expression and returns the result of one of the two expressions, depending on whether the Boolean expression evaluates to true
or false
, as the following example shows:
:::code language="csharp" interactive="try-dotnet-method" source="snippets/shared/ConditionalOperator.cs" id="BasicExample":::
As the preceding example shows, the syntax for the conditional operator is as follows:
condition ? consequent : alternative
The condition
expression must evaluate to true
or false
. If condition
evaluates to true
, the consequent
expression is evaluated, and its result becomes the result of the operation. If condition
evaluates to false
, the alternative
expression is evaluated, and its result becomes the result of the operation. Only consequent
or alternative
is evaluated. Conditional expressions are target-typed. That is, if a target type of a conditional expression is known, the types of consequent
and alternative
must be implicitly convertible to the target type, as the following example shows:
:::code language="csharp" source="snippets/shared/ConditionalOperator.cs" id="TargetTyped":::
If a target type of a conditional expression is unknown (for example, when you use the var
keyword) or the type of consequent
and alternative
must be the same or there must be an implicit conversion from one type to the other:
:::code language="csharp" source="snippets/shared/ConditionalOperator.cs" id="NotTargetTyped":::
The conditional operator is right-associative, that is, an expression of the form
a ? b : c ? d : e
is evaluated as
a ? b : (c ? d : e)
Tip
You can use the following mnemonic device to remember how the conditional operator is evaluated:
is this condition true ? yes : no
A conditional ref expression conditionally returns a variable reference, as the following example shows:
:::code language="csharp" interactive="try-dotnet-method" source="snippets/shared/ConditionalOperator.cs" id="ConditionalRef":::
You can ref
assign the result of a conditional ref expression, use it as a reference return or pass it as a ref
, out
, in
, or ref readonly
method parameter. You can also assign to the result of a conditional ref expression, as the preceding example shows.
The syntax for a conditional ref expression is as follows:
condition ? ref consequent : ref alternative
Like the conditional operator, a conditional ref expression evaluates only one of the two expressions: either consequent
or alternative
.
In a conditional ref expression, the type of consequent
and alternative
must be the same. Conditional ref expressions aren't target-typed.
Use of the conditional operator instead of an if
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:
:::code language="csharp" source="snippets/shared/ConditionalOperator.cs" id="CompareWithIf":::
A user-defined type can't overload the conditional operator.
For more information, see the Conditional operator section of the C# language specification.
Specifications for newer features are: