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