Cómo usar switch en lugar de if/else
Clase 21 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Etapa 5 – POO reutilicemos nuestro código
- 2

Herencia para reutilizar código C#
10:30 min - 3

Herencia y Polimorfismo en Programación Orientada a Objetos
11:42 min - 4

Polimorfismo en Programación Orientada a Objetos
13:17 min - 5

Casting en C#: cuándo funciona y cuándo falla
07:09 min - 6

Conversiones seguras en C# con is y as
12:44 min - 7

Sobrescribir ToString para depuración en C#
08:15 min
Etapa 6- Ajustes y funcionalidad
Etapa 7 – Preparando información para nuestros reportes
- 11

Manejo Avanzado de Métodos y Parámetros en Programación
15:43 min - 12

Manejo de Parámetros de Salida en Visual Studio Code
04:38 min - 13

Sobrecarga de Métodos para Parámetros de Salida Opcionales
05:51 min - 14

Optimización de Listas: Buenas Prácticas en C#
04:16 min - 15

Dictionary: cómo funciona en C#
11:14 min - 16

Diccionarios con polimorfismo en C#
10:48 min - 17

Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#
11:33 min - 18

Foreach anidado para diccionarios en C#
13:47 min - 19

Depuración de diccionarios en C#
09:37 min - 20

Parámetro opcional para controlar impresión en C#
11:47 min - 21

Cómo usar switch en lugar de if/else
Viendo ahora - 22

Números aleatorios y eventos en C#
12:52 min - 23

Diccionarios y Refactoring en Programación Básica
02:13 min
Etapa 8 – Consultas
- 24

Cómo crear un reporteador en C sharp
11:42 min - 25

Generación segura de reportes en sistemas de información
10:21 min - 26

Construcción de reportes con LINQ en C#
11:48 min - 27

Diccionario con evaluaciones por asignatura
08:32 min - 28

Tipos anónimos en LINQ para reportes complejos
10:52 min - 29

Cálculo del Promedio de Notas Agrupadas por Alumno y Asignatura
10:46 min - 30

Creación de Tipos de Datos Personalizados en Programación Avanzada
12:05 min - 31

Generación de Reportes con LINQ en C#
02:09 min
Etapa 9 – Creando una UI de Consola
Aprende a sustituir cadenas de if/else por el operador lógico switch cuando recorres un diccionario en .NET. Verás cómo usar la llave como indicador del tipo, imprimir cada objeto con su formato, evitar casts frágiles y redondear notas a dos decimales con Math.Round y MathF.Round. Todo con buenas prácticas de legibilidad y verificación de tipos.
¿Por qué cambiar if/else por switch al recorrer un diccionario?
Al recorrer un diccionario, la llave ya “dice” el tipo del objeto asociado: escuela, alumno, asignatura, curso o evaluación. En lugar de múltiples comparaciones y else if, un switch sobre la llave simplifica y mejora la lectura.
- Visual Studio y Visual Studio Code ofrecen snippet para switch. Ahorra tiempo y reduce errores.
- Cada case representa un tipo de llave y concentra su lógica de impresión.
- Con break delimitas el bloque de instrucciones para cada etiqueta.
- Usa default para “cualquier otra cosa” no especificada.
¿Cómo estructurar el switch con keys del diccionario?
- Cambia a un switch sobre la llave actual: si la llave es evaluación, escuela, alumno o curso, imprime según el caso. Si no coincide, cae en default y usa Console.WriteLine con el valor completo.
switch (key)
{
case Evaluacion:
if (imprimirEvaluaciones)
{
// imprimir evaluación con su formato.
}
break;
case Escuela:
// impresión especial para escuela.
break;
case Alumno:
// impresión especial para alumno.
break;
case Curso:
// impresión especial para curso.
break;
default:
Console.WriteLine(val); // salida por defecto.
break;
}
- Detalle importante: el break va después de cada case; esta sintaxis viene de C y puede parecer “rara” si esperabas llaves por bloque.
- Tip de mantenimiento: si detectas salidas duplicadas, revisa impresiones antiguas que hayan quedado obsoletas.
¿Cómo activar o desactivar la impresión de evaluaciones?
- Controla la salida con un parámetro booleano: imprimir evaluaciones. Úsalo dentro del case Evaluacion para decidir si se imprime o no.
- Para probar, ejecuta con dotnet run y ajusta el parámetro a true para ver todas las evaluaciones.
¿Cómo contar alumnos de un curso sin casts frágiles?
Imprimir cursos incluye una variante: mostrar el nombre y la cantidad de alumnos. Para obtenerla desde el valor del diccionario evita la “versión fea” del cast directo.
¿Por qué evitar el cast directo?
- Un cast como ((Curso)val).Alumnos.Count “funciona”, pero es propenso a errores y cuesta leerlo.
// feo: cast directo
override string ToString()
{
var cantidad = ((Curso)val).Alumnos.Count;
return val.Nombre + " - Cantidad de alumnos: " + cantidad;
}
¿Cómo usar as y verificación de null?
- Prefiere un cast seguro con as y comprueba null antes de acceder. Es más claro y te “cura en salud”.
var cursoTmp = val as Curso;
if (cursoTmp != null)
{
var cantidad = cursoTmp.Alumnos.Count;
Console.WriteLine(cursoTmp.Nombre + " - Cantidad de alumnos: " + cantidad);
}
- Consejo de legibilidad: extrae conversiones “largas” a una variable local. En Visual Studio, usa “control punto” para extraer a variable local y limpiar el bloque.
- Mantén el código compacto sin sacrificar calidad: claridad primero.
¿Cómo redondear evaluaciones a dos decimales en .NET?
Las notas se generan y luego se redondean a dos decimales para que “parezcan notas reales”. Hay dos rutas: Math.Round (devuelve double) y MathF.Round (devuelve float).
¿Cuándo usar Math.Round vs MathF.Round?
- Si tu dato final es float y usas Math.Round, conviertes el resultado a float después del redondeo.
- Si trabajas en float de punta a punta, usa MathF.Round y evitas conversiones extra.
// Math.Round: devuelve double, convértelo al final a float.
float nota = (float)Math.Round(
/* expresión que calcula la nota, produce double */,
2
);
// MathF.Round: trabaja con float de extremo a extremo.
float nota = MathF.Round(
/* expresión en float */,
2
);
¿Cómo resolver el error de conversión double a float?
- Identifica de dónde sale el double: por ejemplo, un next.double multiplicado por un entero produce double.
- Ordena la expresión y coloca los paréntesis donde corresponde. La conversión a float debe aplicarse sobre el resultado completo, no sobre partes sueltas.
- Con orden, el compilador deja de “pelear” y el redondeo a dos cifras funciona como esperas.
¿Cómo validar el resultado en tiempo de ejecución?
- Ejecuta con dotnet run y revisa la salida: alumnos, asignaturas y escuelas con sus formatos. Si activaste la bandera, verás evaluaciones redondeadas a dos decimales.
- Observación de datos: un generador pseudoaleatorio puede repetir valores con frecuencia. Si notas patrones repetidos, podrías optimizar esa parte más adelante.
¿Tú cómo mejorarías la generación de notas y el formateo de impresión por tipo de llave? Comparte tu enfoque y sugerencias en los comentarios.