我有一些代码设置了一个包含enum的一些defualt值的字典:
foreach (string status in Enum.GetNames(typeof(TargetStatusType)))
{
dict.Add((TargetStatusType)Enum.Parse(typeof(TargetStatusType), status), 0);
}
有没有更简单的方法来做到这一点,因为它看起来有点乱。
我希望我能做到
foreach(TargetStatusType status in ?) ...
谢谢!
答案 0 :(得分:4)
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;代替