C# 运行时与c'bracketed'类型转换的等价物是什么

C# 运行时与c'bracketed'类型转换的等价物是什么,c#,casting,enums,runtime,C#,Casting,Enums,Runtime,假设我有一个枚举 [Flags] public enum E { zero = 0, one = 1 } 那我就可以写了 E e; object o = 1; e = (E) o; 它会起作用的 但是如果我试着在运行时这样做,比如 (o as IConvertible).ToType(typeof(E), null) 它将抛出InvalidCastException 那么,我是否可以在运行时调用一些东西,并将其从int32转换为enum,就像我编写上述转换一样?将转换结果

假设我有一个枚举

[Flags]
public enum E { 
    zero = 0,
    one = 1
}
那我就可以写了

E e;
object o = 1;
e = (E) o;
它会起作用的

但是如果我试着在运行时这样做,比如

(o as IConvertible).ToType(typeof(E), null)
它将抛出InvalidCastException


那么,我是否可以在运行时调用一些东西,并将其从int32转换为enum,就像我编写上述转换一样?

将转换结果保存在中的变量看起来如何?也就是说,你用哪种类型来声明它

如果你想有一个对象变量,就这样做吧。使用Activator.CreateInstance创建枚举的默认实例,而不是null:

object o = Activator.CreateInstance(typeof(E));

保存转换结果时,变量的外观如何?也就是说,你用哪种类型来声明它

如果你想有一个对象变量,就这样做吧。使用Activator.CreateInstance创建枚举的默认实例,而不是null:

object o = Activator.CreateInstance(typeof(E));
你也可以使用

Enum.Parse(typeof(E), (int)o)
你也可以使用

Enum.Parse(typeof(E), (int)o)

我希望它是客观的。即,装箱枚举。关键是编译时不知道类型,所以我不想用确切的类型声明“destination”变量。我现在看到了您的问题。正如我的代码所显示的,它实际上与铸造没有任何关系。相反,问题在于基于运行时类型创建实例。否。这个问题与对象创建无关。我有一个整数值,它来自xml文件。问题是:如何将其分配给该对象?同样,实际的类型E是作为类型参数出现的,在编译类型中是未知的,所以我不能编写castI,我希望它是对象。即,装箱枚举。关键是编译时不知道类型,所以我不想用确切的类型声明“destination”变量。我现在看到了您的问题。正如我的代码所显示的,它实际上与铸造没有任何关系。相反,问题在于基于运行时类型创建实例。否。这个问题与对象创建无关。我有一个整数值,它来自xml文件。问题是:如何将其分配给该对象?同样,实际的类型E是作为一个类型参数出现的,在编译类型中是未知的,因此我无法编写castmeta-因为这个Q只处理enum,建议有人将“enum”添加到标题和/或标记中。meta-因为这个Q只处理enum,建议有人将“enum”添加到标题和/或标记中。