Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Instrucciones de selección:
Las ifinstrucciones , if-else y switch seleccionan instrucciones que se van a ejecutar desde muchas rutas de acceso posibles en función del valor de una expresión. La if instrucción ejecuta una instrucción solo si una expresión booleana proporcionada se evalúa como true. La if-else instrucción permite elegir cuál de las dos rutas de acceso de código se deben seguir en función de una expresión booleana. La switch instrucción selecciona una lista de instrucciones para ejecutarse en función de una coincidencia de patrón con una expresión.
Instrucción if
Una if instrucción puede ser cualquiera de las dos formas siguientes:
Una
ifinstrucción con unelseelemento selecciona una de las dos instrucciones que se van a ejecutar en función del valor de una expresión booleana, como se muestra en el ejemplo siguiente:DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) { if (tempInCelsius < 20.0) { Console.WriteLine("Cold."); } else { Console.WriteLine("Perfect!"); } }Una
ifinstrucción sin elementoelseejecuta su cuerpo solo si una expresión booleana se evalúatruecomo , como se muestra en el ejemplo siguiente:DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) { if (value < 0 || value > 100) { Console.Write("Warning: not acceptable value! "); } Console.WriteLine($"The measurement value is {value}"); }
Puede anidar if instrucciones para comprobar varias condiciones, como se muestra en el ejemplo siguiente:
DisplayCharacter('f'); // Output: A lowercase letter: f
DisplayCharacter('R'); // Output: An uppercase letter: R
DisplayCharacter('8'); // Output: A digit: 8
DisplayCharacter(','); // Output: Not alphanumeric character: ,
void DisplayCharacter(char ch)
{
if (char.IsUpper(ch))
{
Console.WriteLine($"An uppercase letter: {ch}");
}
else if (char.IsLower(ch))
{
Console.WriteLine($"A lowercase letter: {ch}");
}
else if (char.IsDigit(ch))
{
Console.WriteLine($"A digit: {ch}");
}
else
{
Console.WriteLine($"Not alphanumeric character: {ch}");
}
}
En un contexto de expresión, puede usar el operador ?:condicional para evaluar una de las dos expresiones en función del valor de una expresión booleana.
Instrucción switch
La switch instrucción selecciona una lista de instrucciones para ejecutarse en función de una coincidencia de patrón con una expresión de coincidencia, como se muestra en el ejemplo siguiente:
DisplayMeasurement(-4); // Output: Measured value is -4; too low.
DisplayMeasurement(5); // Output: Measured value is 5.
DisplayMeasurement(30); // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN); // Output: Failed measurement.
void DisplayMeasurement(double measurement)
{
switch (measurement)
{
case < 0.0:
Console.WriteLine($"Measured value is {measurement}; too low.");
break;
case > 15.0:
Console.WriteLine($"Measured value is {measurement}; too high.");
break;
case double.NaN:
Console.WriteLine("Failed measurement.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
En el ejemplo anterior, la switch instrucción usa los siguientes patrones:
- Un patrón relacional: para comparar un resultado de expresión con una constante.
- Patrón constante: pruebe si un resultado de expresión es igual a una constante.
Importante
Para obtener información sobre los patrones admitidos por la switch instrucción , vea Patterns.
En el ejemplo anterior también se muestra el default caso. El default caso especifica instrucciones que se van a ejecutar cuando una expresión de coincidencia no coincide con ningún otro patrón de caso. Si una expresión de coincidencia no coincide con ningún patrón de caso y no hay ningún default caso, el control pasa por una switch instrucción .
Una switch instrucción ejecuta la lista de instrucciones en la primera sección del modificador cuyo patrón de mayúsculas y minúsculas coincide con una expresión de coincidencia y cuya protección de mayúsculas y minúsculas, si está presente, se evalúa como true. Una switch instrucción evalúa los patrones de mayúsculas y minúsculas en el orden de texto de arriba a abajo. El compilador genera un error cuando una switch instrucción contiene un caso inaccesible. Es un caso que ya está controlado por una mayúscula o cuyo patrón es imposible de coincidir.
Nota:
El default caso puede aparecer en cualquier lugar dentro de una switch instrucción . Independientemente de su posición, el default caso solo se evalúa si todos los demás patrones de caso no coinciden o la goto default; instrucción se ejecuta en una de las secciones switch.
Puede especificar varios patrones de casos para una sección de una switch instrucción, como se muestra en el ejemplo siguiente:
DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50); // Output: Measured value is 50.
DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range.
void DisplayMeasurement(int measurement)
{
switch (measurement)
{
case < 0:
case > 100:
Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
Dentro de una switch instrucción , el control no puede pasar de una sección switch a la siguiente. Como se muestra en los ejemplos de esta sección, normalmente se usa la break instrucción al final de cada sección switch para pasar el control de una switch instrucción. También puede usar las instrucciones return y throw para pasar el control de una switch instrucción. Para imitar el comportamiento de caída y pasar el control a otra sección del modificador, puede usar la goto instrucción .
Importante
Cada sección de modificador debe terminar con un break, goto o return. Al pasar de una sección de modificador a la siguiente se genera un error del compilador. Sin embargo, se pueden aplicar varias etiquetas de conmutador a la misma sección switch, como case < 0: en el ejemplo anterior. Esta elección de diseño deliberada permite controlar de forma concisa varios casos que comparten la misma lógica o interdependiente.
En un contexto de expresión, puede usar la switch expresión para evaluar una expresión única de una lista de expresiones candidatas basadas en una coincidencia de patrón con una expresión.
Importante
Diferencias entre la expresión switch y la instrucción switch:
- switch se usa para controlar el flujo de ejecución dentro de un bloque de código.
- la expresión switch se usa normalmente en contextos de asignación de valor devuelto y valor, a menudo como miembros con forma de expresión.
- Una sección switch expression case no puede estar vacía, una instrucción switch puede.
Protección de mayúsculas y minúsculas
Es posible que un patrón de caso no sea lo suficientemente expresivo como para especificar la condición para la ejecución de la sección switch. En tal caso, puede usar una protección de casos. Se trata de una condición adicional que debe cumplirse junto con un patrón coincidente. Una protección de casos debe ser una expresión booleana. Especifique una protección de mayúsculas y minúsculas después de la when palabra clave que sigue un patrón, como se muestra en el ejemplo siguiente:
DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5.
void DisplayMeasurements(int a, int b)
{
switch ((a, b))
{
case (> 0, > 0) when a == b:
Console.WriteLine($"Both measurements are valid and equal to {a}.");
break;
case (> 0, > 0):
Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
break;
default:
Console.WriteLine("One or both measurements are not valid.");
break;
}
}
En el ejemplo anterior se usan patrones posicionales con patrones relacionales anidados.
Especificación del lenguaje C#
Para más información, vea las secciones siguientes de la Especificación del lenguaje C#:
Para obtener más información sobre los patrones, consulte la sección Patrones y coincidencia de patrones de la especificación del lenguaje C#.