如何获取C#中所有枚举值的数组?


91

我有一个枚举,我想显示所有可能的值。有没有办法获取该枚举的所有可能值的数组或列表,而不是手动创建此类列表?例如,如果我有一个枚举:

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

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


Answers:


162

这将使用以下方法为您提供枚举值的简单数组Enum.GetValues

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

这为您提供了一个通用列表:

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

谢谢,正是我想要的!
Mark LeMoine

5
这使我总是想知道为什么Enumnum.GetValues()Enumnum.GetNames()不存在。
dalle 2010年

8
对于在编译时已知元素类型的数组变量,请使用var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));
Jeppe Stig Nielsen 2013年

Enum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5:在您的示例中,这ActualType意味着什么?对于枚举,它将Enumnum在OP的示例中,或者可以是基础类型(通常是int)。您还有其他想法吗?
德克·沃尔玛

16

试试这个代码:

Enum.GetNames(typeof(Enumnum));

这将返回string[]带有所选枚举的所有枚举名称的a。


1
返回枚举值的名称;OP似乎是在追求价值本身。
Michael Petrotta 2010年

6
Enum.GetValues(typeof(Enumnum));

返回枚举中值的数组。


5

您可能想要这样做:

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

这一切INT值enum11,22,33,44

您可以通过以下方式获取这些值:

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

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



2

有了这个:

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

您可以像这样访问values数组:

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

1
Enum.GetValues不返回字符串[]
Messenger 2010年

1

您可以使用

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

这将返回一个数组!


1

如果您喜欢更通用的方式,请按此处。您可以根据需要添加更多转换器。

    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

你也可以用

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

用于以enum格式获取枚举中的所有元素。


0

OP询问如何获取enumC#中所有值的数组?

如果要enum在C#中获取选定值的数组怎么办?

您的枚举

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

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

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

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

学分归于知识渊博的tl。

参考文献:

1。

2。

希望可以帮助某人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.