当类型未知时,如何从 CreateInstance 转换返回值?
例如在这段代码中:
MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);
如何将我的 o 转换为 mInfo.ReturnType 包含的任何内容?
当类型未知时,如何从 CreateInstance 转换返回值?
例如在这段代码中:
MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);
如何将我的 o 转换为 mInfo.ReturnType 包含的任何内容?
强制转换(至少按照您通常的意思)是编译时/静态类型的操作。甚至在运行时对未知类型有意义的唯一方法是处理泛型(将其转换为一些T
- 并注意您可以T
在运行时通过MakeGenericMethod
or选择MakeGenericType
),或元编程(发出 IL 以执行适当的投掷)。在所有其他情况下,当类型在运行时之前未知时,您会被困在object
ordynamic
中。
通常你不能以习惯的方式这样做,除非情况mInfo.ReturnType
包含在编译时在当前上下文中可见的类型定义。例如,如果mInfo.ReturnType
有bool
定义,您可以简单地执行以下操作:
bool t = (bool)o;
但在这种情况下,使用 Activator 是没有意义的。当您尝试使用从另一个程序集加载的类型时,将使用 Activator 类,换句话说,该类型在编译时不可见。
所以答案你没有办法做到这一点。