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.
Tip
Este artículo forma parte de la sección Aspectos básicos de los desarrolladores que ya conocen al menos un lenguaje de programación y están aprendiendo C#. Si no está familiarizado con la programación, comience primero con los tutoriales de introducción . Para obtener la sintaxis completa, vea instrucciones de selección en la referencia del lenguaje.
¿Viene de otro idioma? C++, Java y JavaScript comparten el patrimonio de C, por lo que if, elsey switch leen lo mismo en C#. La única diferencia que merece la pena tener en cuenta: C# prohíbe pasar entre casos no vacíos switch y cada case etiqueta puede probar un patrón en lugar de solo una constante. Si vienes de Python, if/else if/else de C# se corresponde con if/elif/else, y el switch basado en patrones de C# es lo más parecido a la sentencia match de Python.
Las instrucciones de selección eligen qué bloque de código se ejecuta en función de una condición. C# proporciona dos: if (con un valor opcional else) para bifurcar en un valor booleano y switch para comparar un valor con varios casos. Una expresión booleana es cualquier expresión que se evalúa como true o false, como la comparación temperature >= 25.
Rama con if y else
Una if instrucción ejecuta su bloque solo cuando su expresión booleana es true. Agregue un else bloque para proporcionar el código que se ejecuta cuando la condición es false:
int temperature = 28;
// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
Console.WriteLine("Warm"); // => Warm
}
else
{
Console.WriteLine("Cool");
}
El cuerpo de un if o else es una sola instrucción, como una asignación o una llamada a un método. Una sentencia de bloque es en sí misma una sola sentencia que encierra cero o más sentencias entre llaves ({ }).
Muchos estándares de codificación recomiendan incluir los cuerpos de rama entre llaves, incluso para una sola instrucción. Las llaves delimitan explícitamente el ámbito. Evita un error común: añadir después una segunda línea que se espera que se ejecute de forma condicional, pero que en cambio se ejecuta de forma incondicional. Solo las llaves deciden qué instrucciones pertenecen a la rama. C# no considera significativos los espacios en blanco, por lo que la sangría por sí sola tampoco lo es. Las llaves son legales incluso alrededor de una línea: el bloque es la única instrucción que ejecuta la rama. Sangra el código para mejorar la legibilidad, pero usa las llaves para definir el bloque.
Prueba de varias condiciones con else if
Para elegir entre más de dos rutas, encadene las condiciones con else if. C# evalúa cada condición en orden y ejecuta el primer bloque cuya condición es truey, a continuación, omite el resto. Un último else gestiona cada caso restante:
int score = 82;
// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else if (score >= 70)
{
grade = "C";
}
else
{
grade = "F";
}
Console.WriteLine(grade); // => B
El orden es importante en una cadena. Dado que la primera condición coincidente gana, coloque primero las condiciones más específicas. En el ejemplo anterior, probar score >= 80 antes de score >= 70 garantiza que una puntuación de 82 se asigne a "B" en lugar de "C".
Hacer coincidir un valor con una instrucción switch
Cuando se compara un único valor con muchos casos discretos, la instrucción switch resulta más clara que una cadena larga de else if. Al igual que if, la sentencia switch es una sentencia de bifurcación: elige qué código ejecutar. Cada case etiqueta muestra un valor que debe coincidir y cada case sección termina con una break instrucción . Apila las etiquetas para que compartan un mismo bloque y usa la sección default para los valores que no coincidan con ningún caso:
DayOfWeek day = DayOfWeek.Saturday;
// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("Weekend"); // => Weekend
break;
default:
Console.WriteLine("Weekday");
break;
}
A diferencia de C y Java, C# no permite que la ejecución pase de una sección no vacía case a la siguiente. Cada sección que contiene código debe terminar con una break (u otra instrucción jump, como return o goto). Esta regla evita los errores por ejecución encadenada accidental, habituales en esos lenguajes.
Patrones de prueba con case y when
Una case etiqueta no se limita a los valores constantes. Puede probar un patrón, que es una regla que describe la forma o el valor de los datos. Un patrón relacional, como, por < 0 ejemplo, coincide con cualquier valor menor que cero. Agregue una when cláusula para adjuntar una condición adicional que también debe ser true para que el caso coincida:
int measurement = 42;
// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
case < 0:
Console.WriteLine("Negative");
break;
case 0:
Console.WriteLine("Zero");
break;
case > 0 when measurement % 2 == 0:
Console.WriteLine("Positive and even"); // => Positive and even
break;
default:
Console.WriteLine("Positive and odd");
break;
}
Los casos basados en patrones se evalúan de arriba abajo, por lo que los patrones más específicos pertenecen antes de los más generales. Para ver el catálogo completo de patrones, consulte comparación de patrones.
Selección de un valor con una expresión
Las if instrucciones y switch deciden qué código se ejecuta. Cuando necesite elegir un valor, use una expresión. Una expresión da como resultado un valor, por lo que puedes usarla en cualquier lugar donde se espere un valor, como la parte derecha de una asignación o como argumento de un método. C# ofrece formularios de expresión que seleccionan un valor de alternativas, como el operador condicional y la switch expresión.
Operador condicional ?:
El operador ?: condicional elige uno de los dos valores en función de una condición booleana.
Para conocer su sintaxis, comportamiento de cortocircuito e instrucciones sobre cómo elegirla en lugar de if/else, vea Operador condicional ?:.
Expresión switch
Una expresión switch es la contraparte en forma de expresión de la instrucción switch. En lugar de ejecutar código para el caso correspondiente, devuelve un valor. Es más conciso que asignar un valor en cada brazo de una switch instrucción y el compilador le advierte cuando los brazos no cubren todas las entradas posibles. La switch expresión es una parte fundamental de la coincidencia de patrones. Para saber cuándo y cómo usarlo, consulte la coincidencia de patrones y la referencia de la expresión switch.