什么是运行时等价的C#“括号”类型的投(what's the runtime equival

2019-09-28 02:24发布

假设我有一个枚举

[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转换为枚举,以同样的方式?

Answer 1:


object o = 1;
object z = Enum.ToObject(typeof(E), o); 



Answer 2:

如何变的样子,你保存在转换的结果? 即哪种类型,你声明呢?

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

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


Answer 3:

您还可以使用

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


文章来源: what's the runtime equivalent of c# 'bracketed' type cast