如何获取枚举键列表

How to get Enum Key list

假设我有一个 enum 类型:

public enum PartyRoleTypeEnum
{
    Stdudent =20,
    Teacher =21,
    Manager =22
}

我正在尝试通过

获取PartyRoleTypeEnum个密钥
list<int> result = Enum.GetValues(typeOf(PartyRoleTypeEnum)).CastTo<int>();

我预计 result 会是 List<int>{20,21,22}

但它 returns 是一个空列表。

你可以试试这个:

List<int> result = Enum.GetValues(typeof(PartyRoleTypeEnum))
                       .Cast<int>()
                       .ToList();

Enum 的方法 GetValues 具有以下签名:

public static Array GetValues(Type enumType)

很明显,这个方法 returns 是一个 Array 对象,它包含 enumType 中常量的值,有关进一步的文档,请查看 here

所以你想要的是将这个数组转换成列表,以便将它赋值给result。这可以使用 IEnumerable's Cast 方法然后在其中调用 IEnumerable's ToList 方法来完成。请注意,没有任何名为 CastTo.

的方法

更新

.NET Fiddle

我尝试修改你的代码并且它有效(编译后):http://csharppad.com/gist/2a87fe395ac2b66fa1d8

public enum PartyRoleTypeEnum
{
    Stdudent =20,
    Teacher =21,
    Manager =22
}

//--------

List<int> result = Enum.GetValues(typeof(PartyRoleTypeEnum)).Cast<int>().ToList();

//--------

Console.WriteLine(result.Count); //Prints 3

//--------
//Prints 20,21,22
foreach(var item in result)
{
    Console.WriteLine(item);
}


//-------- 
List<int> myList = new List<int>();
Array myArray = Enum.GetValues(typeof(PartyRoleTypeEnum));

foreach (var item in myArray)
    myList.Add((int)item);

尝试:

List<int> result = Enum.GetValues(typeof(PartyRoleTypeEnum)).
                   .OfType<PartyRoleTypeEnum>().Select(x=> (int)x)
                   .ToList();