有一个可以 通过 反射枚举值的方法 获得,通过使用该枚举类型的GetFields()方法,你得到 希望 的值。
该GetFields()方法返回一个数组的FieldInfo。 枚举将有一个特点是:它的值的数组作为字段表示。 此外,它会返回的元素不是枚举值。 你会发现在FieldInfo的一组Is*()方法中,一个在这种情况下非常有趣; IsLiteral。所有的值都标记为真。 该解决方案是那么单纯而简单的(C#3.0的语法,需要的LINQ):
public static class EnumHelper
{
public static T[] GetValues<T>()
{
Type enumType = typeof (T);
if (!enumType.IsEnum)
{
throw new ArgumentException ("Type '" + enumType.Name + "' is not an enum" );
}
List <T> values = new List <T>();
var fields = from field in enumType.GetFields()
where field.IsLiteral
select field;
foreach (FieldInfo field in fields)
{
object value = field.GetValue(enumType);
values.Add((T)value);
}
return values.ToArray();
}
public static object [] GetValues(Type enumType)
{
if (!enumType.IsEnum)
{
throw new ArgumentException ("Type '" + enumType.Name + "' is not an enum" );
}
List <object > values = new List <object >();
var fields = from field in enumType.GetFields()
where field.IsLiteral
select field;
foreach (FieldInfo field in fields)
{
object value = field.GetValue(enumType);
values.Add(value);
}
return values.ToArray();
}
}
http://www.dolittle.com/blogs/einar/archive/2008/01/13/missing-enum-getvalues-when-doing-silverlight-for-instance.aspx