Creación y Manejo de Diccionarios en C# para Aplicaciones Escolares

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

Resumen

¿Cómo implementar un diccionario para nuestra aplicación en C#?

La implementación de un diccionario en el contexto de una aplicación de escuela puede sonar compleja al principio, pero te prometo que al final de esta guía habrá quedado mucho más claro. Vamos a explorar cómo crear un diccionario en C# que haga sentido para representar tipos de objetos dentro de una escuela, como escuelas, cursos y más.

¿Cómo creamos el diccionario en C#?

El propósito es establecer una estructura donde las claves son string y los valores son una serie de objetos de un tipo genérico conocido como IEnumerable<ObjetoEscuelaBase>. Para ello, comenzaremos definiendo las bases de nuestro método.

public Dictionary<string, IEnumerable<ObjetoEscuelaBase>> GetDiccionarioDeObjetos()
{
    var diccionario = new Dictionary<string, IEnumerable<ObjetoEscuelaBase>>();

    var escuela = new ObjetoEscuela();  // Asumiendo que ya está inicializado
    diccionario.Add("Escuela", new[] { escuela });

    // Agregar cursos
    var cursos = new List<Curso>(); // Asumiendo que ya fue llenada con cursos
    diccionario.Add("Cursos", cursos.Cast<ObjetoEscuelaBase>());

    return diccionario;
}

¿Cuál es la lógica detrás del uso de diccionarios?

El concepto aquí es simple: asociar una clave con un valor, donde la clave es un string (por ejemplo, "Escuela") y el valor es una lista de objetos. Sin embargo, debido a las compatibilidades y herencias en C#, no podemos asignar una lista de un tipo directamente a una lista de un tipo padre sin realizar un cast explícito.

¿Por qué usar IEnumerable y casting?

La elección de IEnumerable como tipo genérico hace que nuestro código sea más flexible.

  • Flexibilidad: Exponemos una interfaz genérica de lista que puede aceptar distintos tipos de colecciones.
  • Casting: Convertir explícitamente, mediante Cast<T>, te asegura que los tipos son compatibles, ya que el polimorfismo no alcanza para realizar esta conversión de manera implícita.

¿Cómo manejamos errores comunes con las claves del diccionario?

Una de las trampas clásicas al manipular diccionarios es la duplicidad de las claves. En C#, cada clave debe ser única. Si intentas agregar una clave que ya existe, el programa lanzará una excepción.

Por ejemplo:

diccionario.Add("Cursos", cursos.Cast<ObjetoEscuelaBase>());
diccionario.Add("Cursos", otroGrupoDeCursos.Cast<ObjetoEscuelaBase>()); // Esto genera un error

¿Estado final del diccionario?

El diccionario final debe tener una estructura donde cada tipo de objeto esté agrupado bajo una clave específica, lo que facilita la recuperación y manipulación de las colecciones dentro de nuestra aplicación de escuela.

Te animo a que sigas explorando las posibilidades de manipular datos y estructuras, ya que tener esta claridad inicial te permitirá crear programas más robustos y eficaces. ¡No te detengas aquí y sigue aprendiendo sobre C# y la gestión de colecciones!