Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#

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

Resumen

Optimiza la integridad de tus diccionarios en C# evitando errores por mayúsculas, ortografía y duplicación de llaves. Aquí verás cómo pasar de llaves tipo string a constantes y luego a enum, una práctica que reduce fallos y hace el código más claro y mantenible.

¿Por qué las llaves string rompen la integridad?

Cuando varias personas agregan elementos a un diccionario con llaves string, es fácil crear duplicados por variaciones de escritura: "cursos", "Cursos", o incluso otra ortografía. El resultado: dos llaves distintas para lo que debía ser lo mismo. Esto provoca datos fragmentados y mantenimiento difícil.

  • Diferentes estilos generan índices distintos en el diccionario.
  • Un string permite errores accidentales al escribir.
  • La integridad del sistema se afecta sin que el compilador avise.

¿Qué problemas típicos aparecen con string en llaves?

  • Duplicados por mayúsculas y minúsculas.
  • Llaves casi iguales que crean nuevas entradas.
  • Uso inconsistente entre equipos y archivos.

¿Cómo ayuda una constante pública en C#?

Una constante es un valor fijo en el programa. Definir una constante por cada llave evita escribir strings a mano una y otra vez. Además, al centralizarlas, todos usan la misma referencia.

  • Palabra clave: const.
  • Tipos nativos: string, int, etc.
  • Acceso: deben ser públicas si se usan desde varios archivos.

¿Cómo declarar constantes y agruparlas en una estructura?

Agrupar constantes en un objeto facilita su uso y evita que queden sueltas. Para tipos sencillos, una struct funciona muy bien.

public struct LlavesDiccionario
{
    public const string CURSO = "cursos";
    public const string ALUMNOS = "alumnos";
    public const string ASIGNATURAS = "asignaturas";
    public const string ESCUELA = "escuela";
    public const string EVALUACIONES = "evaluaciones";
}
  • Beneficio: se usan como LlavesDiccionario.CURSO.
  • Convención: mayúscula inicial o todo en mayúsculas, según preferencia del equipo.
  • Herramienta: edición desde Visual Studio Code.

¿Cuál es la debilidad de las constantes con string?

Aunque mejoran, el diccionario sigue siendo de tipo string. Aún es posible escribir "cursos" directo y romper la integridad.

  • El compilador no impide usar un literal string.
  • El error puede colarse en cualquier punto del código.

¿Por qué migrar a enum para las llaves del diccionario?

Con una enumeración, el método y el diccionario ya no dependen de strings. Solo aceptan valores predefinidos, lo que evita errores accidentales. Además, el código se vuelve más autoexplicativo.

¿Cómo definir y usar un enum como llave?

Primero, define la enumeración. Se recomienda usar nombres en singular para claridad semántica.

public enum LlaveDiccionario
{
    Escuela,
    Curso,
    Alumno,
    Asignatura,
    Evaluacion
}

Luego, cambia las firmas y usos para que dependan del enum.

// Antes: dependencia de string
IEnumerable<object> Obtener(string llave) { /* ... */ }

// Después: dependencia de enum
IEnumerable<object> Obtener(LlaveDiccionario llave) { /* ... */ }

// Uso seguro
envar cursos = Obtener(LlaveDiccionario.Curso);
  • El compilador obliga a elegir entre valores válidos del enum.
  • Se elimina la posibilidad de escribir "cursos" como string suelto.
  • El diccionario trabaja con LlaveDiccionario en vez de string.

¿Qué debes saber sobre el enum y su base entera?

Un enum se basa en enteros. Alguien podría forzar un valor numérico por casting, pero ya no sería un error casual, sino un acto intencional.

  • Cada miembro equivale a un número interno.
  • La trampa requiere casting explícito.
  • En la práctica, el uso normal queda fuertemente tipado.

¿Qué ganancia obtienes en mantenimiento y calidad?

  • Menos fricción y menos errores humanos.
  • Código legible y coherente en todo el proyecto.
  • Llaves centralizadas y tipadas que el compilador valida.

¿Tienes dudas o una forma distinta de tipar las llaves de tus diccionarios en C#? Cuéntalo en los comentarios y enriquezcamos el enfoque entre todos.