Ardalis.SmartEnum para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Ardalis.SmartEnum para C# (.NET): guía completa con ejemplos

1. ¿Qué es y por qué usarlo?

Ardalis.SmartEnum es una librería para C# (.NET) que resuelve uno de los problemas más comunes en el desarrollo: las limitaciones de los enumerados (enum) tradicionales. Los enumerados nativos de C# son, en esencia, un conjunto de constantes numéricas. No pueden contener lógica, campos adicionales (como descripciones, códigos de moneda o colores) ni métodos. Esto obliga a usar estructuras switch o if-else que violan los principios SOLID (especialmente el Principio Abierto/Cerrado) y hacen que el código sea más difícil de mantener.

SmartEnum ofrece una alternativa: los enumerados inteligentes (Smart Enums). Son clases que heredan de la clase base SmartEnum<TEnum, TValue>. Cada valor de este enumerado es un campo estático singleton. Gracias a esto, puedes agregar cualquier propiedad (Name y Value son obligatorias, además de las personalizadas), métodos e incluso implementar interfaces. Esto transforma un enumerado de un simple conjunto de números en un objeto completo con comportamiento.

¿Para qué sirve? Primero, para seguridad de tipos. No puedes asignar accidentalmente un valor que no esté definido en el enumerado (a diferencia de los enum tradicionales, donde puedes hacer (MiEnum)42). Segundo, para encapsular la lógica. En lugar de escribir métodos de extensión o clases auxiliares, colocas la lógica directamente dentro del enumerado. Tercero, para mejorar la legibilidad. El código se vuelve autodocumentado: cada valor del enumerado incluye no solo un nombre, sino también contexto.

2. Instalación

La librería se instala a través de NuGet. Ejecuta uno de los siguientes comandos en la consola del administrador de paquetes o en la terminal de .NET CLI:

# Con .NET CLI
dotnet add package Ardalis.SmartEnum

# Con Package Manager Console
Install-Package Ardalis.SmartEnum

Después de la instalación, agrega using Ardalis.SmartEnum; al inicio del archivo.

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear un enumerado simple para los días de la semana. Observa que heredamos de SmartEnum<TEnum, TValue>, donde TEnum es nuestra clase y TValue es el tipo del valor (normalmente int o string).

using Ardalis.SmartEnum;

public sealed class DiaSemana : SmartEnum<DiaSemana, int>
{
    // Los campos estáticos son los valores del enumerado
    public static readonly DiaSemana Lunes = new DiaSemana(nameof(Lunes), 1);
    public static readonly DiaSemana Martes = new DiaSemana(nameof(Martes), 2);
    public static readonly DiaSemana Miercoles = new DiaSemana(nameof(Miercoles), 3);
    public static readonly DiaSemana Jueves = new DiaSemana(nameof(Jueves), 4);
    public static readonly DiaSemana Viernes = new DiaSemana(nameof(Viernes), 5);
    public static readonly DiaSemana Sabado = new DiaSemana(nameof(Sabado), 6);
    public static readonly DiaSemana Domingo = new DiaSemana(nameof(Domingo), 7);

    // El constructor privado es obligatorio
    private DiaSemana(string name, int value) : base(name, value) { }
}

// Uso
public class Program
{
    public static void Main()
    {
        var hoy = DiaSemana.Lunes;
        Console.WriteLine(hoy.Name);   // Lunes
        Console.WriteLine(hoy.Value);  // 1

        // Búsqueda por valor
        var diaDesdeValor = DiaSemana.FromValue(3);
        Console.WriteLine(diaDesdeValor.Name); // Miercoles

        // Búsqueda por nombre
        var diaDesdeNombre = DiaSemana.FromName("Viernes");
        Console.WriteLine(diaDesdeNombre.Value); // 5
    }
}

4. Métodos/funciones/clases principales

Veamos las funcionalidades clave de

Recommendations