有一个可以 通过 反射枚举值的方法 获得,通过使用该枚举类型的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