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 }?


4

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();

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.


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.


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.



2

com isso:

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

e você pode acessar a matriz de valores assim:

Array myArray = Enum.GetValues(typeof(Enumnum));

1
Enum.GetValues ​​não retorna uma string []
messenger

1

Você pode usar

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

Isso retorna um array!


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>();

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.