Como listar todos os valores de um Enum em C#: guia completo para iniciantes

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

Por que a pergunta "How can I enumerate an enum?" é tão popular?

\n\n

Se você já programou em C# e lidou com enumerações (enum), certamente já se perguntou: "Como obtenho todos os valores deste enum?". Essa pergunta é um verdadeiro sucesso no Stack Overflow, acumulando milhares de visualizações. E não é surpresa: enumerar um enum é uma daquelas tarefas que parecem simples, mas sem conhecer a sintaxe correta, pode confundir até mesmo um desenvolvedor experiente.

\n\n

Neste artigo, vamos analisar como listar corretamente todos os valores de um enum em C#, mostrar exemplos de código funcionais que você pode copiar diretamente para seu projeto e falar sobre as armadilhas. Vamos lá!

\n\n

O que é um enum em C#? Um breve lembrete

\n\n

Enum (enumeração) é um tipo de dado que permite definir um conjunto de constantes nomeadas. Por exemplo, dias da semana, status de pedidos ou tipos de erro. Em C#, um enum é declarado assim:

\n\n
public enum DayOfWeek\n{\n    Monday,\n    Tuesday,\n    Wednesday,\n    Thursday,\n    Friday,\n    Saturday,\n    Sunday\n}
\n\n

Cada elemento recebe, por padrão, um valor inteiro (começando em 0). Mas muitas vezes surge a necessidade de percorrer todos os elementos de um enum — por exemplo, para exibi-los em uma lista suspensa, criar um array ou verificar se um valor existe.

\n\n

Como listar todos os valores de um enum: método básico

\n\n

A maneira mais popular e simples é usar o método estático Enum.GetValues(). Ele retorna um array com todos os valores da enumeração especificada. Veja como funciona:

\n\n
using System;\n\npublic class Program\n{\n    public enum Status\n    {\n        New,\n        InProgress,\n        Completed,\n        Cancelled\n    }\n\n    public static void Main()\n    {\n        // Obtém todos os valores do enum\n        Status[] allStatuses = (Status[])Enum.GetValues(typeof(Status));\n\n        // Percorre-os com foreach\n        foreach (Status status in allStatuses)\n        {\n            Console.WriteLine(status);\n        }\n    }\n}
\n\n

Resultado da execução:

\n
New\nInProgress\nCompleted\nCancelled
\n\n

Observe: fazemos uma conversão explícita para o array Status[], porque Enum.GetValues() retorna um Array (não tipado).

\n\n

Alternativa: Enum.GetNames()

\n\n

Se você precisa não dos valores em si, mas apenas de seus nomes em string, use Enum.GetNames():

\n\n
string[] statusNames = Enum.GetNames(typeof(Status));\nforeach (string name in statusNames)\n{\n    Console.WriteLine(name);\n}
\n\n

O resultado será o mesmo, mas o tipo do elemento é string, não Status. Isso é útil ao trabalhar com interface do usuário ou serialização.

\n\n

Abordagem moderna: versão genérica (C# 7.3+)

\n\n

A partir do C# 7.3, temos uma maneira mais elegante — Enum.GetValues<T>(). Ela retorna um array do tipo específico, sem necessidade de conversão:

\n\n
Status[] allStatuses = Enum.GetValues<Status>();\n\nforeach (Status status in allStatuses)\n{\n    Console.WriteLine($"ID: {(int)status}, Name: {status}");\n}
\n\n

Este método é mais curto e mais seguro em termos de tipos. Se você usa uma versão moderna do C# (e deveria!), recomendo este.

\n\n

Exemplo da vida real: preenchendo uma lista suspensa

\n\n

Imagine que você está criando um aplicativo de gerenciamento de tarefas. Precisa mostrar ao usuário uma lista de status possíveis em um menu suspenso. Veja como fazer isso com enumeração de enum:

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class TaskManager\n{\n    public enum TaskStatus\n    {\n        NotStarted,\n        InProgress,\n        WaitingForReview,\n        Done\n    }\n\n    publ                

Blogs

Book Recommendations