Silverlight缺少枚举的GetValues,因此我想编写一个扩展方法来满足我的项目需求。唯一的问题是,我不确定扩展方法的签名应该是什么样子的。我考虑的大概是这样:
public static IEnumerable<Enum> GetValues(this Enum e)
但它没有出现在Intellisense中,所以我知道我错了。有什么指导吗?
Silverlight缺少枚举的GetValues,因此我想编写一个扩展方法来满足我的项目需求。唯一的问题是,我不确定扩展方法的签名应该是什么样子的。我考虑的大概是这样:
public static IEnumerable<Enum> GetValues(this Enum e)
但它没有出现在Intellisense中,所以我知道我错了。有什么指导吗?
我通过结合一点反射和在Reflector中挖掘,我想我找到了解决方法:
public static Array GetValues(this Enum enumType)
{
Type type = enumType.GetType();
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Static);
Array array = Array.CreateInstance(type, fields.Length);
for (int i = 0; i < fields.Length; i++)
{
var obj = fields[i].GetValue(null);
array.SetValue(obj, i);
}
return array;
}