Enum.GetValues 方法在 Silverlight 下实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值