Usar enumerações para representar constantes nomeadas em C#
Imagine que você trabalha em um projeto para acompanhar os status dos pedidos e precisa organizar valores como "Pendente", "Enviado" ou "Entregue" de maneira clara e gerenciável. O uso de enumerações em C# permite que você crie uma lista desses status de pedidos. Ao adotar enumerações, fica mais fácil usar esses status no projeto sem recriar ou realizar pesquisas repetidamente.
Descrever um cenário para enumerações e o valor das enumerações
Enumerações são ideais para representar um conjunto de valores predefinidos que são mutuamente exclusivos ou que podem ser combinados. Por exemplo, você pode usar uma enumeração para definir as estações do ano:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
O exemplo de código demonstra como definir uma enumeração para representar valores mutuamente exclusivos.
As enumerações melhoram a legibilidade do código porque substituem literais numéricos por nomes significativos. Elas também ajudam a impedir que valores inválidos sejam atribuídos porque só permitem constantes definidas.
Observação
As enumerações também podem representar combinações de opções usando sinalizadores de bits, que são úteis para cenários como permissões de arquivo ou opções de configuração.
Definir enumerações
Para definir uma enumeração em C#, use a palavra-chave enum seguida pelo nome da enumeração e os membros dela. Confira um exemplo de enumeração simples para os dias da semana:
enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
O exemplo de código demonstra como definir uma enumeração para os dias da semana.
Por padrão, o tipo subjacente de uma enumeração é int, e os valores começam em 0, com incrementos de 1 para cada membro.
Observação
As enumerações são limitadas a tipos integrais (por exemplo, int, byte e short) e não podem representar valores não integrais, como cadeias de caracteres ou decimais.
Definir tipos e valores subjacentes para enumerações
Você pode especificar um tipo integral subjacente diferente para uma enumeração e atribuir valores personalizados aos membros dela. Por exemplo:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
O exemplo de código demonstra como definir um tipo e valores subjacentes personalizados para uma enumeração.
Devido a essa flexibilidade, é possível alinhar valores de enumeração com sistemas externos ou requisitos específicos.
Dica
Evite usar como tipo subjacente para as enumerações os tipos que não são integrais, como char, porque isso pode resultar em um comportamento não confiável.
Realizar conversões com enumerações
As enumerações dão suporte a conversões explícitas entre os membros e o tipo integral subjacente. Por exemplo:
DaysOfWeek day = (DaysOfWeek)3;
Console.WriteLine(day); // Outputs: Wednesday
O exemplo de código demonstra como executar uma conversão explícita de um valor integral para uma enumeração.
Você pode validar valores de enumeração usando o método System.Enum.IsDefined:
bool isValid = Enum.IsDefined(typeof(DaysOfWeek), 3);
Console.WriteLine(isValid); // Outputs: True
O exemplo de código demonstra como validar um valor de enumeração usando System.Enum.IsDefined.
Dica
Quando o valor é inválido, é possível lidar com ele atribuindo um valor padrão ou lançando uma exceção para garantir o uso seguro.
Aplicar práticas recomendadas para criar enumerações
Para criar enumerações de maneira efetiva:
- Use substantivos singulares para enumerações simples e substantivos plurais para enumerações de sinalizador.
- Forneça um valor igual a zero para enumerações simples, normalmente chamadas de
None. - Evite usar valores especiais ou reservados porque eles podem confundir os usuários.
- Use potências de dois para enumerações de sinalizador a fim de permitir operações bit a bit.
Dica
Considere adicionar métodos de extensão a enumerações para obter mais funcionalidade, como validação ou formatação.
Implementar enumerações com valores e métodos personalizados
Embora as enumerações não possam conter métodos diretamente, é possível adicionar essa funcionalidade usando métodos de extensão. Por exemplo:
public static class DaysOfWeekExtensions
{
public static bool IsWeekend(this DaysOfWeek day)
{
return day == DaysOfWeek.Saturday || day == DaysOfWeek.Sunday;
}
}
DaysOfWeek today = DaysOfWeek.Saturday;
Console.WriteLine(today.IsWeekend()); // Outputs: True
O exemplo de código demonstra como usar um método de extensão para adicionar funcionalidade a uma enumeração.
Dica
Use métodos de extensão para aprimorar as enumerações sem modificar a definição delas, a fim de torná-las mais versáteis e reutilizáveis.
Exemplo prático: usar enumerações para gerenciar status de pedidos
Em geral, as enumerações são usadas em aplicativos para representar valores predefinidos. Por exemplo, em um aplicativo de comércio eletrônico, é possível usar uma enumeração para gerenciar os status dos pedidos:
enum OrderStatus
{
Pending,
Shipped,
Delivered,
Cancelled
}
class Order
{
public int OrderId { get; set; }
public OrderStatus Status { get; set; }
public void UpdateStatus(OrderStatus newStatus)
{
Status = newStatus;
Console.WriteLine($"Order {OrderId} status updated to {Status}");
}
}
var order = new Order { OrderId = 123, Status = OrderStatus.Pending };
order.UpdateStatus(OrderStatus.Shipped);
Este exemplo demonstra como definir uma enumeração para status de pedidos, usá-la em uma classe e atualizar o status de um pedido. Ele é útil para iniciantes porque ajuda a notar como as enumerações podem ser aplicadas em cenários reais.
Com enumerações, é possível substituir literais numéricos por nomes significativos, a fim de tornar o código mais intuitivo e fácil de manter, o que também permite conversões explícitas e validações para garantir o uso seguro dessas constantes em projetos.