2010-09-28 94 views
61

我有一个枚举,我想显示所有可能的值。有没有办法获得枚举的所有可能值的数组或列表,而不是手动创建这样的列表?例如如果我有一个枚举:如何获得在C#中的所有枚举值的数组?

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

我将如何能够得到一个List<Enumnum>包含{ TypeA, TypeB, TypeC, TypeD }

+4

可能重复的[转换枚举到列表中的C#](http://stackoverflow.com/questions/1167361/convert-enum-to-list-in-c) – 2010-09-28 20:30:15

回答

116

这可以让你使用Enum.GetValues枚举值的简单数组:

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

这让你一个通用的清单:

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

谢谢,正是我一直在寻找! – 2010-09-28 20:34:54

+5

这让我总是想知道为什么'Enumnum.GetValues()'和'Enumnum.GetNames()'不存在。 – dalle 2010-09-28 20:38:17

+4

对于元素类型在编译时已知的数组变量,使用'var valuesAsArray =(Enumnum [])Enum.GetValues(typeof(Enumnum));'。 – 2013-09-22 19:51:52

1

您可以使用

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

这将返回一个数组中!

6
Enum.GetValues(typeof(Enumnum)); 

返回的值的数组枚举。

12

试试这个代码:

Enum.GetNames(typeof(Enumnum)); 

这返回string[]与所选择的枚举的所有枚举名。

+1

返回枚举值的*名称*; OP似乎是在* values *之后。 – 2010-09-28 20:26:18

1

与此:

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

,您可以访问阵列,像这样的值:

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

Enum.GetValues不返回一个字符串[] – messenger 2010-09-28 21:00:59

0

也可以使用

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

为获得枚举所有元素为JSON格式。

2

东西有点不同:

typeof(SomeEnum).GetEnumValues(); 
1

你可能想这样做:

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

所有诠释的这个enum11,22,33,44值。

您可以通过此获取这些值:

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

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

0

如果您更喜欢更通用的方式,那就是。您可以根据需要添加更多转换器。

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

    } 

实现范例:

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

的OP询问如何获得在C#中的所有enum值的数组?

如果你想在C#中获得一个选定的enum值的数组怎么办?

你枚举

enum WeekDays 
    { 
     Sunday, 
     Monday, 
     Tuesday 
    } 

如果你只想从你的Enum选择Sunday

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

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

学分去知识的tl。

参考文献:

1.

2.

希望可以帮助别人。