C# 将对象转换为枚举

标签 c# c#-4.0 enums

这个问题与泛型方法中枚举的转换有关

给定一个枚举

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/

相关文章:

c# - 检测 IEnumerable<T> 是否已分组,我在检查类型时得到了一些疯狂的结果

enums - 如何检查 Verilog 枚举是否有效?

java - 以不同的方式将枚举映射到 Spring 形式选择

c# - 使两个列表相互连接

c# - 如何将调试器附加到命令行 mstest

c# 从 ListView 控件中拖放

c# - 按版本对字符串列表进行排序

c# - 内部带有 gridview 的 Updatepanel 不会触发事件

c# - WPF工具包 : Type reference cannot find a public type

C# 我可以访问没有完全限定名称的枚举吗