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

Mar*_*ine 79 c# enums

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

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }
Run Code Online (Sandbox Code Playgroud)

我怎么能得到一个List<Enumnum>包含{ TypeA, TypeB, TypeC, TypeD }

Dir*_*mar 145

这将使用Enum.GetValues以下内容获取枚举值的简单数组:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));
Run Code Online (Sandbox Code Playgroud)

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

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();
Run Code Online (Sandbox Code Playgroud)

  • 对于在编译时已知元素类型的数组变量,请使用`var valuesAsArray =(Enumnum [])Enum.GetValues(typeof(Enumnum));`. (7认同)
  • 这让我总是想知道为什么`Enumnum.GetValues()`和`Enumnum.GetNames()`不存在. (5认同)

Øyv*_*hen 16

试试这段代码:

Enum.GetNames(typeof(Enumnum));
Run Code Online (Sandbox Code Playgroud)

这将返回一个string[]包含所选枚举的所有枚举名称.

  • 返回枚举值的*名称*;OP 似乎是在*值*本身之后。 (3认同)

Jor*_*dan 15

现在,使用 .NET 5.0 中的通用方法,这要容易得多。

ColorEnum[] colors = Enum.GetValues<ColorEnum>();
Run Code Online (Sandbox Code Playgroud)

MS 文档:Enum.GetValues


dur*_*0rz 6

Enum.GetValues(typeof(Enumnum));
Run Code Online (Sandbox Code Playgroud)

返回Enum中的值数组.


Mit*_*ers 5

您可以使用

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();
Run Code Online (Sandbox Code Playgroud)

这将返回一个数组!


Ali*_*ani 5

你可能想要这样做:

public enum Enumnum { 
            TypeA = 11,
            TypeB = 22,
            TypeC = 33,
            TypeD = 44
        }
Run Code Online (Sandbox Code Playgroud)

这个的所有 int 值enum都是11,22,33,44.

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

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);
Run Code Online (Sandbox Code Playgroud)

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