Operador ?: (referencia de C#)?: operator (C# reference)

El operador condicional ?:, normalmente conocido como operador condicional ternario, evalúa una expresión booleana y devuelve el resultado de evaluar una de dos expresiones, en función de que la expresión booleana se evalúe como true o 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. A partir C# 7.2, la expresión condicional ref devuelve la referencia al resultado de una de las dos expresiones.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

La sintaxis del operador condicional es la siguiente:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

La expresión condition debe evaluarse como true o false.The condition expression must evaluate to true or false. Si condition se evalúa como true, se evalúa la expresión consequent y su resultado se convierte en el resultado de la operación.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Si condition se evalúa como false, se evalúa la expresión alternative y su resultado se convierte en el resultado de la operación.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Solo se evalúan consequent o alternative.Only consequent or alternative is evaluated.

Los tipos de consequent y alternative deben coincidir o debe haber una conversión implícita de un tipo al otro.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

El operador condicional es asociativo a la derecha, es decir, una expresión de la formaThe conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

se evalúa comois evaluated as

a ? b : (c ? d : e)

Sugerencia

Puede utilizar el siguiente recurso mnemotécnico para recordar cómo se evalúa el operador condicional:You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

En el siguiente ejemplo se muestra el uso del 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

Expresión condicional refConditional ref expression

A partir C# 7.2, puede utilizar la expresión condicional ref para devolver la referencia al resultado de una de las dos expresiones.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. Puede asignar esa referencia a una variable ref local o ref readonly local, o bien usarla como un valor devuelto de referencia o como un parámetro de 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.

La sintaxis de la expresión condicional ref es la siguiente:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Al igual que el operador condicional original, la expresión condicional ref evalúa solo una de las dos expresiones: ya sea consequent o alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

En el caso de la expresión condicional ref, los tipos de consequent y alternative deben coincidir.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

En el siguiente ejemplo se muestra el uso de la expresión 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

Para más información, vea la nota de propuesta de características.For more information, see the feature proposal note.

Operador condicional y una instrucción if..elseConditional operator and an if..else statement

El uso del operador condicional a través de una instrucción if-else podría traducirse en código más conciso en aquellos casos en los que potencialmente tenga que calcular un valor.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. El ejemplo siguiente muestra dos maneras de clasificar un entero como negativo o no 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";

Posibilidad de sobrecarga del operadorOperator overloadability

El operador condicional no se puede sobrecargar.The conditional operator cannot be overloaded.

Especificación del lenguaje C#C# language specification

Para más información, vea la sección sobre operadores condicionales de la Especificación del lenguaje C#.For more information, see the Conditional operator section of the C# language specification.

Vea tambiénSee also