代码之家  ›  专栏  ›  技术社区  ›  artem

c的括号式类型转换在运行时等效于什么

  •  1
  • artem  · 技术社区  · 17 年前

    假设我有一个枚举

    [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?

    3 回复  |  直到 14 年前
        1
  •  4
  •   shahkalpesh    17 年前
    
    object o = 1;
    object z = Enum.ToObject(typeof(E), o); 
    
    
        2
  •  0
  •   Konrad Rudolph    17 年前

    将转换结果保存到中时,变量看起来是什么样子的?即,你用哪种类型申报?

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

    object o = Activator.CreateInstance(typeof(E));
    
        3
  •  0
  •   Ben Childs    17 年前

    您还可以使用

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