Eu tenho o seguinte código:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
No entanto, não posso indexar valores. Existe uma maneira mais fácil de fazer isso?
Ou perdi algo totalmente!
Enum.GetName(typeof(MyEnum), val), (int)val)
em que a saída fornece o nome e o número da enumeração.Cast<T>
o resultado:Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>()...
Você precisa lançar a matriz - a matriz retornada é realmente do tipo solicitado, ou seja,
myEnum[]
se você solicitartypeof(myEnum)
:Então
values[0]
etcfonte
Você pode lançar esse Array para diferentes tipos de Arrays:
ou se você quiser os valores inteiros:
Você pode iterar essas matrizes lançadas, é claro :)
fonte
Que tal uma lista de dicionário?
e, claro, você pode alterar o tipo de valor do dicionário para quaisquer valores de enum.
fonte
Outra solução, com possibilidades interessantes:
fonte
Aqui está outro. Precisávamos fornecer nomes amigáveis para nossos EnumValues. Usamos System.ComponentModel.DescriptionAttribute para mostrar um valor de string personalizado para cada valor enum.
Em uso
Isso acabará retornando "Algo 1", "Algo 2"
fonte
Que tal usar um loop foreach, talvez você pudesse trabalhar com isso?
algo assim talvez?
fonte
Pergunta antiga, mas uma abordagem um pouco mais limpa usando o LINQ
.Cast<>()
fonte
Array tem um método GetValue (Int32) que você pode usar para recuperar o valor em um índice especificado.
Array.GetValue
fonte
Você pode simplificar isso usando strings de formato. Eu uso o seguinte snippet nas mensagens de uso:
O especificador de formato D formata o valor enum como um decimal. Também há um especificador X que fornece saída hexadecimal.
O especificador G formata um enum como uma string. Se o atributo Flags for aplicado ao enum, os valores combinados também serão suportados. Há um especificador F que atua como se Flags estivesse sempre presente.
Veja Enum.Format ().
fonte
Nos resultados de Enum.GetValues, a conversão para int produz o valor numérico. Usar ToString () produz o nome amigável. Nenhuma outra chamada para Enum.GetName é necessária.
fonte
Esta é uma maneira simples de iterar por meio de seu objeto Enum personalizado
fonte
Pergunta antiga, mas a resposta do 3Dave forneceu a abordagem mais fácil. Eu precisava de um pequeno método auxiliar para gerar um script Sql para decodificar um valor enum no banco de dados para depuração. Funcionou muito bem:
Eu tenho um método estático, então o uso é:
fonte