Como obter uma matriz de todos os valores de enum em C #?

90

Tenho um enum do qual gostaria de exibir todos os valores possíveis. Existe uma maneira de obter uma matriz ou lista de todos os valores possíveis do enum em vez de criar manualmente essa lista? por exemplo, se eu tiver um enum:

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }

como eu seria capaz de obter um List<Enumnum>que contém { TypeA, TypeB, TypeC, TypeD }?

Mark LeMoine
fonte
4
possível duplicata de converter enum para listar em c #
Mark Byers

Respostas:

161

Isso fornece uma matriz simples dos valores enum usando Enum.GetValues:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));

E isso dá a você uma lista genérica:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();
Dirk Vollmar
fonte
Obrigado, exatamente o que eu estava procurando!
Mark LeMoine
5
Isso me faz sempre perguntar por que Enumnum.GetValues()e Enumnum.GetNames()não existe.
dalle
8
Para uma variável de matriz onde o tipo de elemento é conhecido em tempo de compilação, use var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen
OuEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5 de
@ mr5: No seu exemplo, o que deveria ActualTypesignificar? Para um enum, seria Enumnumno exemplo do OP, ou poderia ser o tipo subjacente (geralmente int). Você tem mais alguma coisa em mente?
Dirk Vollmar
16

Experimente este código:

Enum.GetNames(typeof(Enumnum));

Isso retorna um string[]com todos os nomes de enum do enum escolhido.

Øyvind Bråthen
fonte
1
Retorna nomes dos valores enum; OP parece estar atrás dos próprios valores .
Michael Petrotta
6
Enum.GetValues(typeof(Enumnum));

retorna uma matriz dos valores no Enum.

duraz0rz
fonte
5

Você pode querer fazer assim:

public enum Enumnum { 
            TypeA = 11,
            TypeB = 22,
            TypeC = 33,
            TypeD = 44
        }

Todos os valores int disso enumsão 11,22,33,44.

Você pode obter esses valores desta forma:

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);

string.Join(",", enumsValues)é 11,22,33,44.

Ali Soltani
fonte
4

Algo um pouco diferente:

typeof(SomeEnum).GetEnumValues();
Termininja
fonte
2

com isso:

string[] myArray = Enum.GetNames(typeof(Enumnum));

e você pode acessar a matriz de valores assim:

Array myArray = Enum.GetValues(typeof(Enumnum));
Dr. TJ
fonte
1
Enum.GetValues ​​não retorna uma string []
messenger
1

Você pode usar

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();

Isso retorna um array!

Vendedores Mitchel
fonte
1

Se você preferir uma forma mais genérica, aqui está. Você pode adicionar mais conversores de acordo com sua necessidade.

    public static class EnumConverter
    {

        public static string[] ToNameArray<T>()
        {
            return Enum.GetNames(typeof(T)).ToArray();
        }

        public static Array ToValueArray<T>()
        {
            return Enum.GetValues(typeof(T));
        }

        public static List<T> ToListOfValues<T>()
        {
            return Enum.GetValues(typeof(T)).Cast<T>().ToList();
        }


        public static IEnumerable<T> ToEnumerable<T>()
        {
            return (T[])Enum.GetValues(typeof(T));
        }

    }

Exemplos de implementações:

   string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
   List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
   Array data = EnumConverter.ToValueArray<ePermittedRoles>();
Ozesh
fonte
0

você também pode usar

var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]";

para obter todos os elementos em enum como formato json.

ModernNet
fonte
0

O OP perguntou: How to get a array de todos os enumvalores em C #?

E se você quiser obter uma matriz de enumvalores selecionados em C #?

Seu enum

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Se você deseja apenas selecionar Sundayde seu Enum.

  WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };

  WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
  (x => x == WeekDays.Sunday).ToArray();

Os créditos vão para tl com conhecimento.

Referências:

1

2

A esperança ajuda alguém.

shaijut
fonte