在可移植的lib中将String转换为Enum

时间:2015-01-08 12:38:45

标签: c# windows-phone-8 enums

我试图以通用的方式将字符串转换为枚举,在便携式类库中

目标是:.NET 4.5,Windows 8,Windows Phone 8.1,Windows Phone Silverlight 8

我有这个字符串扩展名,我之前在Winform应用程序中使用过它。但是在这个库中它没有编译。行if (!typeof(TEnum).IsEnum)不起作用

public static class StringExtensions
{        

    public static TEnum? AsEnum<TEnum>(this string value) where TEnum : struct,  IComparable, IFormattable
    {
        if (!typeof(TEnum).IsEnum)
            throw new ArgumentException("TEnum must be an enumerated type");

        TEnum result;
        if (Enum.TryParse(value, true, out result))
            return result;

        return null;
    }
 }

所以我的问题是:在给定的上下文中,如何测试给定类型是枚举?

2 个答案:

答案 0 :(得分:3)

如果不支持Type.IsEnum,您可以随时使用:

if (typeof(TEnum).BaseType != typeof(Enum))

(当然,假设BaseType可用。)

答案 1 :(得分:2)

您可以尝试使用GetTypeInfo

using System.Reflection; // to get the extension method for GetTypeInfo()    

if(typeof(TEnum).GetTypeInfo().IsEnum)
  // whatever