这个问题与泛型方法中枚举的转换有关
给定一个枚举
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;
尝试执行 crusty 的初始化时抛出运行时异常。
谁能解释为什么会发生这种情况,以及为什么这样做是不合法的。
并不是说我真的想这样做,但我在尝试让泛型发生类似的事情时遇到了一个问题,而这实际上是幕后发生的事情。即
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
所以我试图做的是有一个通用函数,它可以与枚举和非枚举一起工作(不是那么关键 - 但会很好)可以设置为短值而不会抛出异常并实际初始化正确的枚举值。
最佳答案
像这样的东西可能会帮助你:
public T dosomething<T>(object o)
{
T enumVal= (T)Enum.Parse(typeof(T), o.ToString());
return enumVal;
}
但这仅对枚举有效,因为使用Enum.Parse(..)
并使用它,例如:
object o = 4;
dosomething<Crustaceans>(o);
这将在您的 案例中返回 Toad
。
关于C# 将对象转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982918/