Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
El operador condicional ?:, también conocido como operador condicional ternario, evalúa una expresión booleana y devuelve el resultado de una de las dos expresiones, en función de que la expresión booleana se evalúe como true o false, tal y como se muestra en el siguiente ejemplo:
string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";
Console.WriteLine(GetWeatherDisplay(15)); // output: Cold.
Console.WriteLine(GetWeatherDisplay(27)); // output: Perfect!
Como se muestra en el ejemplo anterior, la sintaxis del operador condicional es la siguiente:
condition ? consequent : alternative
La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.
La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.
Sugerencia
Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.
La expresión condition debe evaluarse como true o 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. 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. Solo se evalúan consequent o alternative. Las expresiones condicionales tienen el tipo de destino. Es decir, si se conoce el tipo de destino de una expresión condicional, los tipos de consequent y alternative se deben poder convertir implícitamente al tipo de destino, como se muestra en el ejemplo siguiente:
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
int? x = condition ? 12 : null;
IEnumerable<int> xs = x is null ? new List<int>() { 0, 1 } : new int[] { 2, 3 };
Si se desconoce el tipo de destino de una expresión condicional (por ejemplo, al usar la palabra clave var) o el tipo de consequent, y alternative debe ser el mismo, o bien, debe haber una conversión implícita de un tipo a otro:
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
var x = condition ? 12 : (int?)null;
El operador condicional es asociativo a la derecha, es decir, una expresión de la forma
a ? b : c ? d : e
se evalúa como
a ? b : (c ? d : e)
Sugerencia
Puede utilizar el siguiente recurso mnemotécnico para recordar cómo se evalúa el operador condicional:
is this condition true ? yes : no
Expresión condicional ref
Una expresión ref condicional devuelve condicionalmente una referencia de variable, como se muestra en el ejemplo siguiente:
int[] smallArray = {1, 2, 3, 4, 5};
int[] largeArray = {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
Puede ref asignar el resultado de una expresión ref condicional. Úselo como devolución de referencia o páselo como parámetro refde método , out, ino ref readonly . También puede asignar al resultado de una expresión ref condicional, como se muestra en el ejemplo anterior.
La sintaxis de una expresión condicional ref es la siguiente:
condition ? ref consequent : ref alternative
Como sucede con el operador condicional, una expresión ref condicional evalúa solo una de las dos expresiones, ya sea consequent o alternative.
En una expresión condicional ref, los tipos de consequent y alternative deben coincidir. Las expresiones condicionales ref no tienen tipo de destino.
Operador condicional y una instrucción if
El uso del operador condicional en lugar de una if instrucción puede dar lugar a código más conciso cuando se necesita calcular condicionalmente un valor. El ejemplo siguiente muestra dos maneras de clasificar un entero como negativo o no negativo:
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 operador
Un tipo definido por el usuario no puede sobrecargar el operador condicional.
Especificación del lenguaje C#
Para más información, vea la sección sobre operadores condicionales de la Especificación del lenguaje C#.
Las especificaciones de las características más recientes son: