Ardalis.SmartEnum para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Ardalis.SmartEnum para C# (.NET): guia completo com exemplos

1. O que é e por que usar

Ardalis.SmartEnum é uma biblioteca para C# (.NET) que resolve um dos problemas mais comuns no desenvolvimento: a dificuldade de trabalhar com enumerações (enum). As enumerações nativas do C# são, basicamente, um conjunto de constantes inteiras. Elas não podem conter lógica, campos adicionais (como descrição, código de moeda, cor) ou métodos. Isso leva a um código inchado com switch ou if-else, violando os princípios SOLID (especialmente o Open/Closed Principle) e tornando o código menos sustentável.

O SmartEnum oferece uma alternativa: enumerações inteligentes (Smart Enums). São classes que herdam da classe base SmartEnum<TEnum, TValue>. Cada valor dessa enumeração é um campo estático singleton. Com isso, você pode adicionar qualquer propriedade (Name, Value — obrigatórios, além de quaisquer personalizadas), métodos e até implementar interfaces. Isso transforma a enumeração de um simples conjunto de números em um objeto completo com comportamento.

Por que usar? Primeiro, para segurança de tipos. Você não pode atribuir acidentalmente um valor que não está definido na enumeração (ao contrário dos enums comuns, onde é possível fazer (MyEnum)42). Segundo, para encapsular lógica. Em vez de escrever métodos de extensão ou classes utilitárias, você coloca a lógica diretamente dentro da enumeração. Terceiro, para legibilidade. O código se torna autodocumentado: cada valor da enumeração carrega não apenas um nome, mas também contexto.

2. Instalação

A biblioteca é instalada via NuGet. Execute um dos seguintes comandos no console do gerenciador de pacotes ou no terminal .NET CLI:

# Via .NET CLI
dotnet add package Ardalis.SmartEnum

# Via Package Manager Console
Install-Package Ardalis.SmartEnum

Após a instalação, adicione using Ardalis.SmartEnum; no início do arquivo.

3. Início rápido — exemplo mínimo funcional

Vamos criar uma enumeração simples para os dias da semana. Observe que herdamos de SmartEnum<TEnum, TValue>, onde TEnum é a nossa classe e TValue é o tipo do valor (geralmente int ou string).

using Ardalis.SmartEnum;

public sealed class DiaSemana : SmartEnum<DiaSemana, int>
{
    // Campos estáticos — são os valores da enumeração
    public static readonly DiaSemana Segunda = new DiaSemana(nameof(Segunda), 1);
    public static readonly DiaSemana Terca = new DiaSemana(nameof(Terca), 2);
    public static readonly DiaSemana Quarta = new DiaSemana(nameof(Quarta), 3);
    public static readonly DiaSemana Quinta = new DiaSemana(nameof(Quinta), 4);
    public static readonly DiaSemana Sexta = new DiaSemana(nameof(Sexta), 5);
    public static readonly DiaSemana Sabado = new DiaSemana(nameof(Sabado), 6);
    public static readonly DiaSemana Domingo = new DiaSemana(nameof(Domingo), 7);

    // Construtor privado é obrigatório
    private DiaSemana(string name, int value) : base(name, value) { }
}

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

        // Busca por valor
        var diaPorValor = DiaSemana.FromValue(3);
        Console.WriteLine(diaPorValor.Name); // Quarta

        // Busca por nome
        var diaPorNome = DiaSemana.FromName("Sexta");
        Console.WriteLine(diaPorNome.Value); // 5
    }
}

4. Principais métodos/funções/classes

Vamos explorar os recursos-chave

Recommendations