【发布时间】:2014-11-24 09:03:08
【问题描述】:
我有一个Enums 列表作为IEnumerable<T>,我需要循环每个项目并得到它的描述,如下所示:
IEnumerable<T> values = (T[])Enum.GetValues(typeof(T));
foreach (Enum value in values)
{
String mylist = Common.MyExtensions.getEnumDescription(value);
}
...
public static string getEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
{
return attributes[0].Description;
}
else
return value.ToString();
}
这会在 foreach 部分产生错误
无法将“T”转换为 System.Enum。
IEnumerable 不是 System.Enum 的列表吗?
什么样的演员可以做到这一点?
【问题讨论】:
-
枚举不应该是 T 吗?
-
也许尝试不进行投射。像这样: var values = Enum.GetValues(typeof(T));
-
枚举变量在哪里?用它代替 T。
-
从 Enum.GetValues 返回的集合不是枚举的集合,而是整数的集合(很可能)。