C# Enum (Enumeração) com exemplo

⚡ Resumo Inteligente

Em C#, as enumerações definem um conjunto nomeado de valores inteiros constantes, como os dias da semana, tornando o código mais fácil de ler e manter. A palavra-chave `enum` declara essas constantes fixas uma única vez para serem reutilizadas em todo o programa.

  • 📐 Definição: A palavra-chave `enum` agrupa constantes nomeadas relacionadas sob um mesmo tipo, substituindo números mágicos dispersos por identificadores legíveis.
  • 🗓️ Exemplo de dias: Uma enumeração chamada Days armazena os dias da semana, e Days.Sun retorna o membro selecionado pelo seu nome.
  • 🔢 Valores subjacentes: Os membros do Enum correspondem a valores inteiros que começam em zero e aumentam de um em um, a menos que números personalizados sejam atribuídos.
  • 🔁 Conversões: As conversões explícitas transformam um enum em seu inteiro, enquanto Enum.Parse e Enum.TryParse convertem o texto de volta em membros.
  • 🚩 Sinalizadores: O atributo Flags permite que uma enumeração combine várias opções como campos de bits usando o operador OR bit a bit.
  • 🤖 Assistência de IA: O GitHub Copilot e o ML.NET ajudam a gerar definições de enumeração e a mapear enumerações para recursos de aprendizado de máquina.

Enum(Enumeração) em C#

Enumeração C#

Uma enumeração é usada em qualquer linguagem de programação para definir um conjunto constante de valores. Por exemplo, os dias da semana podem ser definidos como uma enumeração e usados ​​em qualquer lugar do programa. Em C#, a enumeração é definida com a ajuda da palavra-chave ‘enum’.

Vamos ver um exemplo de como podemos usar a palavra-chave ‘enum’.

No nosso exemplo, definiremos uma enumeração chamada dias, que será utilizada para armazenar os dias da semana. Para cada exemplo, modificaremos apenas a função principal em nosso arquivo Program.cs.

Enumeração C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Explicação:-

  1. O 'enum' tipo de dados é especificado para declarar uma enumeração. O nome da enumeração é Dias. Todos os dias da semana são especificados como valores da enumeração.
  2. Finalmente, a função console.write é usada para exibir um dos valores da enumeração.

Se o código acima for inserido corretamente e o programa for executado com sucesso, a seguinte saída será exibida.

Saída:

Enumeração C#

Na saída, você pode ver que o valor 'Sun' da enumeração é exibido no console.

Por que usar enums em C#?

Enums tornam um programa mais fácil de ler, mais seguro e mais simples de manter. Em vez de espalhar números inexplicáveis, às vezes chamados de números mágicos, por todo o código, uma enumeração atribui a cada valor um nome descritivo que indica sua finalidade.

  • Legibilidade: Um nome como Days.Fri é muito mais claro do que o número 5, portanto, qualquer pessoa que leia o código entende o significado imediatamente.
  • Segurança do tipo: Uma variável declarada com um tipo enum só pode armazenar um dos membros definidos, o que impede que valores inválidos sejam atribuídos.ping pol
  • Capacidade de manutenção: Constantes relacionadas residem em um único local, portanto, adicionar ou renomear um valor atualiza todo o programa de forma consistente.
  • Ligação de dados: Frameworks como WPF e ASP.NET podem associar um enum a uma lista suspensa, o que torna os enums úteis para a construção de interfaces de usuário.

Como o compilador verifica cada atribuição em relação aos membros permitidos, os enums também ajudam a detectar erros precocemente, antes da execução do programa.

Atribuindo valores personalizados a um Enum em C#

Por padrão, o C# atribui o valor 0 ao primeiro membro da enumeração e incrementa cada membro subsequente em um. Na enumeração `Days` acima, `Sun` é igual a 0, `Mon` é igual a 1 e `Sat` é igual a 6. Você pode sobrescrever esses valores padrão atribuindo números explícitos.

  • Valores explícitos: Escrever o enum Level {Low = 1, Medium = 5, High = 10} define cada membro para um número escolhido em vez da sequência padrão.
  • Tarefa parcial: Se você atribuir um valor apenas a alguns membros, o compilador manterá a numeração a partir do último valor atribuído para os membros subsequentes.
  • Tipo subjacente: Por padrão, um enum armazena seus membros como int, mas você pode optar por usar byte, short ou long para economizar memória ou ampliar o intervalo.

Valores personalizados são úteis quando os números precisam corresponder a um sistema externo, como códigos de banco de dados ou constantes de protocolo, para que a enumeração reflita exatamente os dados reais.

Como converter enums em C# para int, string e flags

Em C#, é frequente a necessidade de converter um valor de enumeração para outro formato, como armazená-lo como um número ou lê-lo de volta a partir de um texto. Essas conversões ocorrem de algumas maneiras padronizadas.

  • Enumeração para inteiro: Uma conversão explícita como (int)Days.Wed retorna o inteiro subjacente, o que é útil para armazenamento ou aritmética.
  • int para enum: A conversão na direção oposta, por exemplo (Days)3, transforma um número de volta no membro de enumeração correspondente.
  • Conversão de string para enum: Enum.Parse e o mais seguro Enum.TryParse convertem um nome como "Sex" no membro Days.Fri sem gerar um erro de texto inválido.
  • Enumeração para string: Chamar ToString em qualquer membro retorna seu nome, então Days.Sun.ToString() produz “Sun” para exibição ou registro.
  • Lista de membros: Enum.GetValues ​​e Enum.GetNames retornam todos os valores ou nomes, o que é útil ao preencher menus ou validar entradas.

Quando uma enumeração deve representar uma combinação de opções em vez de uma única opção, aplique o atributo Flags e atribua a cada membro uma potência de dois, como 1, 2, 4 e 8. Em seguida, você pode combinar os membros com o operador OR bit a bit e testar uma opção específica com o método HasFlag.

Essas técnicas de conversão permitem que um enum transite facilmente entre nomes legíveis, números armazenados e conjuntos de sinalizadores combinados, mantendo a integridade do conjunto.ping O restante do programa é seguro em termos de digitação e fácil de seguir.

Perguntas Frequentes

Uma variável enum tem como valor padrão 0, o valor atribuído ao membro que for igual a 0. Se nenhum membro for igual a 0, a variável ainda manterá o valor 0; portanto, os desenvolvedores costumam definir primeiro um membro None ou Unknown para evitar confusão.

Uma constante define um valor nomeado, enquanto um enum agrupa um conjunto relacionado de constantes nomeadas sob um único tipo. Enums também adicionam segurança de tipo, pois uma variável só pode armazenar um dos membros definidos na enumeração.

Sim. Um enum pode ser declarado dentro de um namespace ou aninhado dentro de uma classe ou struct, o que limita seu escopo a esse tipo. No entanto, o C# não permite que um enum seja declarado dentro do corpo de um método.

Sim. Dois ou mais membros podem compartilhar o mesmo número subjacente, fazendo com que os nomes posteriores sejam aliases do primeiro. As comparações os tratam como iguais e a conversão desse valor para uma string retorna o nome definido primeiro na enumeração.

Um enum é um tipo de valor, portanto, armazena seus dados diretamente em vez de como uma referência na memória heap. Ele herda de System.Enum, mas se comporta como o tipo integral subjacente, o que torna a cópia e a comparação de valores de enum rápidas.

Sim. No ML.NET, você pode mapear um enum para uma característica ou rótulo categórico, geralmente convertendo-o para seu valor inteiro ou usando uma codificação one-hot. Enums fortemente tipados mantêm as colunas de entrada de um pipeline de aprendizado de máquina claras e consistentes.

Sim. O GitHub Copilot sugere definições de enumeração completas, valores personalizados, atributos Flags e auxiliares de conversão, como Enum.TryParse, dentro do Visual Studio e VS Code. RevAnalise cada sugestão, pois o Copilot pode escolher valores ou nomes que não se adequam ao seu domínio.

Utilize o método Enum.IsDefined, que retorna verdadeiro quando um determinado número ou nome corresponde a um membro definido. Combiná-lo com Enum.TryParse permite validar a entrada do usuário com segurança antes de converter o texto em um valor de enumeração.

Resuma esta postagem com: