这个问题与泛型方法中的枚举类型有关
给定一个枚举
public enum Crustaceans
{
Frog = 1,
Toad = 4
}
我可以简单地创建我的枚举实例
short val = 4;
Crustaceans crusty = (Crustaceans) val;
然而,如果
short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;
尝试执行硬壳的初始化时抛出运行时异常。
谁能解释为什么会发生这种情况,以及为什么这样做是不合法的。
并不是我真的想这样做,但是当我试图用泛型实现类似的事情时,我遇到了一个问题,实际上这就是幕后发生的事情。IE
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
所以我试图做的是有一个通用函数,它可以与枚举和非枚举一起使用(不是那么关键,但会很好),可以将其设置为一个短值而不会引发异常并实际初始化正确的枚举值。