【发布时间】:2012-04-30 16:26:45
【问题描述】:
类似于Cast int to enum in C#,但我的枚举是一个通用类型参数。处理此问题的最佳方法是什么?
例子:
private T ConvertEnum<T>(int i) where T : struct, IConvertible
{
return (T)i;
}
生成编译器错误Cannot convert type 'int' to 'T'
完整代码如下,其中value可以是int,也可以是null。
private int? TryParseInt(string value)
{
var i = 0;
if (!int.TryParse(value, out i))
{
return null;
}
return i;
}
private T? TryParseEnum<T>(string value) where T : struct, IConvertible
{
var i = TryParseInt(value);
if (!i.HasValue)
{
return null;
}
return (T)i.Value;
}
【问题讨论】:
-
stackoverflow.com/questions/2745320/… - 可能有帮助吗?
-
stackoverflow.com/questions/1331739/… 上的最后一个答案更接近你想要的。虽然它仍然不聪明。我倾向于为此使用反射,您可以使代码更强大。在我看来,Struct 的限制性不足以让使用泛型变得值得。