C# 在可移植库中将字符串转换为枚举
我试图在一个可移植类库中,以一种通用的方式将字符串转换为枚举 目标是:.NET 4.5、Windows 8、Windows Phone 8.1、Windows Phone Silverlight 8 我有这个字符串扩展,我以前在Winform应用程序中使用过。但在这个库中它不编译。如果(!typeof(TEnum).IsEnum)行不起作用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
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。