从枚举中获取值

时间:2009-05-27 09:48:49

标签: c# .net enums

我有一些代码设置了一个包含enum的一些defualt值的字典:

foreach (string status in Enum.GetNames(typeof(TargetStatusType)))
{
    dict.Add((TargetStatusType)Enum.Parse(typeof(TargetStatusType), status), 0);
}

有没有更简单的方法来做到这一点,因为它看起来有点乱。

我希望我能做到

foreach(TargetStatusType status in ?) ...

谢谢!

3 个答案:

答案 0 :(得分:4)

使用Enum.GetValues()

foreach (TargetStatusType type in Enum.GetValues(typeof(TargetStatusType)))

请注意,虽然GetValues()仅声明返回Array,但foreach循环会自动为您执行强制转换。或者,您可以将结果转换为TargetStatusType[],如果您想在不同的循环中使用它,那么转换每个值会很不方便。

答案 1 :(得分:1)

首先,这里不需要使用字典(或者为此创建任何类型的新集合)。此外,只需调用GetValues,获取枚举值的名称然后解析它们就是一种非常复杂的方法。

以下应该做的工作:

foreach(var status in Enum.GetValues(typeof(TargetStatusType))
    .Cast<TargetStatusType>())
{
    // ...
}

Cast扩展方法的调用意味着您的status变量是强类型的(类型为TargetStatusType),而不仅仅是object类型。

答案 2 :(得分:1)

如果这是字典的初始化(没有添加先前的值),您也可以使用linq dict = Enum.GetValues(typeof(TargetStatusType))。ToDictinary(en =&gt; en,x =&gt; 0)

但我不禁想知道为什么要将它们添加到词典中。你可能有很好的理由:)我想知道因为价值是一样的。如果是查找,则使用枚举的int值的数组索引将比字典快得多。如果您不关心该值并且只想强制添加一次密钥,则可以使用Hashset&lt;&gt;代替