循环访问C#枚举的键和值


Loop through a C# enum's keys AND values

本问题已经有最佳答案,请猛点这里访问。

给定c枚举:

1
2
3
4
5
6
public enum stuffEnum: int
{
    New = 0,
    Old = 1,
    Fresh = 2
}

如何循环使用它,以便在一个循环中复制键及其值?类似:

1
2
3
4
5
6
7
foreach(var item in stuffEnum)
{
    NewObject thing = new NewObject{
       Name = item.Key,
       Number = item.Value
    }
}

因此,您将得到3个对象,它们的名称属性设置为"新建"、"旧"和"新",数字属性设置为0、1和2。

我该怎么做?


枚举类具有您要查找的方法。

1
2
3
4
5
6
7
8
9
foreach(int i in Enum.GetValues(typeof(stuff)))
{
    String name = Enum.GetName(typeof(stuff), i);
    NewObject thing = new NewObject
    {
        Name = name,
        Number = i
    };
}

您可以使用LINQ(几乎总是这样):

1
2
3
List<NewObject> stuff = Enum.GetValues(typeof(stuffEnum)).Cast<stuffEnum>()
    .Select(s => new NewObject { Name = s.ToString(), Number = (int) s })
    .ToList();


1
2
3
4
foreach (var enumValue in Enum.GetValues(typeof(StuffEnum)))
{
    Console.WriteLine("Name: {0}, Value: {1}", enumValue, (int)enumValue);
}

结果在

1
2
3
Name: New, Value: 0
Name: Old, Value: 1
Name: Fresh, Value: 2