Depuración de diccionarios en C#
Clase 19 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Aprende a verificar, depurar e imprimir un diccionario en C# con confianza. Aquí verás cómo validar su estructura en Visual Studio, recorrer sus contenidos con foreach y mejorar la legibilidad de la salida con títulos y conversión de enum a texto. Todo se basa en una implementación donde el diccionario consolida escuela, cursos, asignaturas, evaluaciones y alumnos.
¿Cómo verificar la estructura del diccionario en C#?
Primero se confirma que el diccionario cumple lo esperado desde el depurador. Con un punto de interrupción en Visual Studio y ejecutando con F5, se inspeccionan las llaves y sus colecciones asociadas. El diccionario temporal queda con cinco llaves: escuela, cursos, evaluación, asignatura y alumno.
- escuela: 1 objeto.
- cursos: 5 cursos.
- asignaturas: 20 asignaturas.
- evaluaciones: 1420 evaluaciones.
- alumnos: 71 alumnos.
Se valida además el flujo de ejecución: continuar con F10, evitar salir del método por accidente y observar la variable dic en el punto justo antes de imprimir.
¿Qué técnicas de depuración aceleran el control?
- usar punto de interrupción donde se construye el diccionario.
- ejecutar con F5 o el botón play indistintamente.
- avanzar con F10 para no entrar a métodos innecesarios.
- observar el contenido de dic y de sus llaves antes de imprimir.
- si se cierra la ejecución, relanzar y ajustar los puntos de interrupción.
¿Qué datos se validaron y por qué importan?
- número de llaves: 5 llaves principales bien definidas.
- consistencia de listas: alumnos, asignaturas y evaluaciones cargadas por completo.
- conteos clave: aseguran volumen real de datos al imprimir.
¿Cómo imprimir el diccionario completo con foreach?
La primera aproximación imprime solo las llaves, porque al iterar el diccionario se obtiene un KeyValuePair y se estaba mostrando su clave. El objetivo es recorrer cada llave y luego sus valores para ver todos los objetos.
Ejemplo de la situación inicial que imprime solo llaves:
foreach (var obj in dic) { Console.WriteLine(obj.Key); // imprime: escuela, curso, evaluación, asignatura, alumno }
Luego, se ajusta para recorrer los valores de cada llave. Como cada valor es una lista, se usa un foreach anidado y se confía en ToString de cada objeto para mostrar información útil.
foreach (var obj in dic) { foreach (var valor in obj.Value) { Console.WriteLine(valor); // usa ToString() del objeto } }
Con este cambio, aparecen todos los alumnos con su identificador único, las asignaturas como “matemáticas”, “castellano”, y un gran volumen de evaluaciones. La salida es correcta, pero extensa.
Conceptos aplicados aquí:
- foreach para recorrer diccionarios y listas anidadas.
- KeyValuePair para acceder a Key y Value.
- Console.WriteLine y ausencia de using static en el contexto.
- reliance en ToString para representar objetos.
- método público public void imprimirDiccionario que recibe el diccionario y considera una IEnumerable de objetos escuela base como modelo de contenido.
¿Cómo mejorar la legibilidad de la salida y qué decidir?
Para distinguir bloques, ayuda imprimir un título por cada llave. Se usa un utilitario como printer.WriteTitle, convirtiendo la clave (que es una enumeración) a texto con ToString. Es necesario importar el espacio de nombres de utilidades antes de llamar a ese método.
// using Utilidades; // ejemplo de import del espacio de nombres foreach (var obj in dic) { Printer.WriteTitle(obj.Key.ToString()); // etiqueta: escuela, curso, evaluación, asignatura, alumno foreach (var valor in obj.Value) { Console.WriteLine(valor); } }
Esto separa claramente escuela, cursos, asignaturas, evaluaciones y alumnos, facilitando la lectura. Aun así, surge la duda sobre el volumen: imprimir todo puede ser demasiado.
¿Qué ajustes de formato ayudan a entender mejor?
- mostrar la llave como título antes de su contenido.
- usar ToString de cada tipo para una representación clara.
- considerar un “label” por elemento: por ejemplo, “evaluación: …”, “alumno: …”.
- ordenar o agrupar por tipo según necesidad.
- evaluar si se requiere paginar o limitar la cantidad de elementos.
¿Qué decisiones quedan abiertas para continuar?
- decidir si se imprimen todos los elementos o solo un subconjunto.
- definir etiquetas por tipo para identificar rápidamente “evaluación” y “alumno”.
- ajustar el método de impresión para diferentes formatos por tipo sin perder simpleza.
Si te interesa ver alternativas de formato, filtros o etiquetas por tipo, comenta qué priorizar: cursos, evaluaciones o alumnos.