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.
Prefiere un cast seguro con as y comprueba null antes de acceder. Es más claro y te “cura en salud”.
var cursoTmp = val asCurso;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.