Depuración de diccionarios en C#

Clase 19 de 35Curso de C# con .Net Core 2.1

Resumen

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.

      Depuración de diccionarios en C#