Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在可移植库中将字符串转换为枚举_C#_Windows Phone 8_Enums - Fatal编程技术网

C# 在可移植库中将字符串转换为枚举

C# 在可移植库中将字符串转换为枚举,c#,windows-phone-8,enums,C#,Windows Phone 8,Enums,我试图在一个可移植类库中,以一种通用的方式将字符串转换为枚举 目标是:.NET 4.5、Windows 8、Windows Phone 8.1、Windows Phone Silverlight 8 我有这个字符串扩展,我以前在Winform应用程序中使用过。但在这个库中它不编译。如果(!typeof(TEnum).IsEnum)行不起作用 public static class StringExtensions { public static TEnum? AsEnu

我试图在一个可移植类库中,以一种通用的方式将字符串转换为枚举

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

我有这个字符串扩展,我以前在Winform应用程序中使用过。但在这个库中它不编译。如果(!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;
    }
 }
公共静态类StringExtensions
{        
publicstatictenum?AsEnum(这个字符串值),其中TEnum:struct,IComparable,IFormattable
{
if(!typeof(TEnum).IsEnum)
抛出新ArgumentException(“TEnum必须是枚举类型”);
十年结果;
if(Enum.TryParse(值、真、输出结果))
返回结果;
返回null;
}
}

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

如果不支持
Type.IsEnum
,则始终可以使用:

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

(当然,假设
BaseType
可用。)

如果不支持
Type.IsEnum
,则始终可以使用:

if (typeof(TEnum).BaseType != typeof(Enum))
(当然,假设基本类型可用。)

您可以尝试使用:

您可以尝试使用:


请定义“不起作用”。这有帮助吗?如下所示:typeof(TEnum)是Enum。来源:奇怪,指定它在可移植库中可用。请定义“不起作用”。它有帮助吗?如下所示:typeof(TEnum)是Enum。来源:奇怪,指定它在可移植库中可用。
IsEnum
是这样实现的吗?@ricoster:不知道。我怀疑有一种更有效的内部实现方法,但这应该会起作用。
IsEnum
是这样实现的吗?@ricoster:不知道。我怀疑有一种更有效的方法可以在内部实现,但这应该是可行的。谢谢你的帮助,我会选择这个解决方案,因为它最接近我所拥有的allready。谢谢你的帮助,我会选择这个解决方案,因为它最接近我所拥有的allready。