2010-09-28 6 views
61

Ho un enume che mi piacerebbe visualizzare tutti i valori possibili di. C'è un modo per ottenere un array o un elenco di tutti i possibili valori dell'enum invece di creare manualmente un elenco di questo tipo? per esempio. Se ho un enum:Come ottenere un array di tutti i valori enum in C#?

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

come vorrei essere in grado di ottenere un List<Enumnum> che contiene { TypeA, TypeB, TypeC, TypeD }?

+4

possibile duplicato di [convertire enum in lista in C#] (http://stackoverflow.com/questions/1167361/convert-enum-to-list-in-c) –

risposta

116

In questo modo si ottiene una matrice piana di valori enum utilizzando Enum.GetValues:

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

E questo si ottiene un elenco generico:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList(); 
+0

Grazie, esattamente quello che stavo cercando! –

+5

Questo mi fa sempre chiedere perché 'Enumnum.GetValues ​​()' e 'Enumnum.GetNames()' non esiste. – dalle

+4

Per una variabile di matrice in cui il tipo di elemento è noto in fase di compilazione, utilizzare 'var valuesAsArray = (Enumum []) Enum.GetValues ​​(typeof (Enumnum));'. –

1

È possibile utilizzare

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

Ciò restituisce un array!

6
Enum.GetValues(typeof(Enumnum)); 

restituisce un array dei valori nella enum.

12

provare questo codice:

Enum.GetNames(typeof(Enumnum)); 

questo ritorno un string[] con tutti i nomi enum della enum prescelto.

+1

Restituisce * nomi * dei valori enum; OP sembra essere dopo i * valori * stessi. –

1

con questo:

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

ed è possibile accedere ai valori di matrice in questo modo:

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

Enum.GetValues ​​non restituisce una stringa [] – messenger

0

inoltre è possibile utilizzare

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

per ottenere tutti gli elementi in enum come formato JSON .

2

Qualcosa di diverso:

typeof(SomeEnum).GetEnumValues(); 
1

Si consiglia di fare in questo modo:

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

Tutti int valori di questo enum è 11,22,33,44.

È possibile ottenere questi valori da questo:

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

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

0

Se si preferisce un modo più generico, eccolo. È possibile aggiungere più convertitori secondo le proprie necessità.

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

    } 

Esempi di implementazione:

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

Il PO chiesto Come ottenere un array di tutti enum valori in C#?

Cosa succede se si desidera ottenere una matrice di valori selezionati enum in C#?

tuo Enum

enum WeekDays 
    { 
     Sunday, 
     Monday, 
     Tuesday 
    } 

Se si desidera selezionare solo Sunday dal Enum.

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

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

I crediti vanno a persona esperta tl.

Riferimenti:

1.

2.

Speranza aiuta qualcuno.

Problemi correlati