Operador ?: (referência do C#)?: operator (C# reference)

O operador condicional ?:, também conhecido como operador condicional Ternário, avalia uma expressão booliana e retorna o resultado de uma das duas expressões, dependendo se a expressão booliana é avaliada como true ou false.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. Começando com C# 7.2, a expressão de referência condicional retorna a referência ao resultado de uma de duas expressões.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

A sintaxe do operador condicional é a seguinte:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

A expressão condition deve ser avaliada para true ou false.The condition expression must evaluate to true or false. Se condition for avaliada como true, a expressão consequent será avaliada e seu resultado se tornará o resultado da operação.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Se condition for avaliada como false, a expressão alternative será avaliada e seu resultado se tornará o resultado da operação.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Somente consequent ou alternative é avaliada.Only consequent or alternative is evaluated.

O tipo de consequent e alternative devem ser iguais ou deve haver uma conversão implícita de um tipo para outro.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

O operador condicional é associativo direito, ou seja, uma expressão da formaThe conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

é avaliada comois evaluated as

a ? b : (c ? d : e)

Dica

Você pode usar o seguinte dispositivo mnemônico para se lembrar de como o operador condicional é avaliado:You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

O exemplo a seguir demonstra o uso do operador condicional:The following example demonstrates the usage of the conditional operator:

double sinc(double x) => x != 0.0 ? Math.Sin(x) / x : 1;

Console.WriteLine(sinc(0.1));
Console.WriteLine(sinc(0.0));
// Output:
// 0.998334166468282
// 1

Expressão condicional refConditional ref expression

Começando com C# 7.2, use a expressão de referência condicional para retornar a referência ao resultado de uma de duas expressões.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. Você pode atribuir essa referência a uma variável ref local ou ref readonly local ou usá-la como um valor de retorno de referência ou como um parâmetro do método 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.

A sintaxe da expressão condicional ref é a seguinte:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Como o operador condicional original, a expressão condicional ref avalia apenas uma das duas expressões: consequent ou alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

No caso da expressão condicional ref, o tipo de consequent e alternative devem ser iguais.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

O exemplo a seguir demonstra o uso da expressão condicional ref:The following example demonstrates the usage of the conditional ref expression:

var smallArray = new int[] { 1, 2, 3, 4, 5 };
var largeArray = new int[] { 10, 20, 30, 40, 50 };

int index = 7;
ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]);
refValue = 0;

index = 2;
((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]) = 100;

Console.WriteLine(string.Join(" ", smallArray));
Console.WriteLine(string.Join(" ", largeArray));
// Output:
// 1 2 100 4 5
// 10 20 0 40 50

Operador condicional e uma instrução if..elseConditional operator and an if..else statement

O uso do operador condicional em vez de uma instrução If-Else pode resultar em um código mais conciso em casos em que você precisa de uma condição para computar um valor.Use of the conditional operator instead of an if-else statement might result in more concise code in cases when you need conditionally to compute a value. O exemplo a seguir demonstra duas maneiras de classificar um inteiro como negativo ou não negativo:The following example demonstrates two ways to classify an integer as negative or nonnegative:

int input = new Random().Next(-5, 5);

string classify;
if (input >= 0)
{
    classify = "nonnegative";
}
else
{
    classify = "negative";
}

classify = (input >= 0) ? "nonnegative" : "negative";

Capacidade de sobrecarga do operadorOperator overloadability

Um tipo definido pelo usuário não pode sobrecarregar o operador condicional.A user-defined type cannot overload the conditional operator.

Especificação da linguagem C#C# language specification

Para saber mais, confira a seção Operador condicional na especificação da linguagem C#.For more information, see the Conditional operator section of the C# language specification.

Para obter mais informações sobre a expressão ref condicional, consulte a Nota de proposta de recurso.For more information about the conditional ref expression, see the feature proposal note.

Consulte tambémSee also