2

当类型未知时,如何从 CreateInstance 转换返回值?

例如在这段代码中:

MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);

如何将我的 o 转换为 mInfo.ReturnType 包含的任何内容?

4

2 回答 2

2

强制转换(至少按照您通常的意思)是编译时/静态类型的操作。甚至在运行时对未知类型有意义的唯一方法是处理泛型(将其转换为一些T- 并注意您可以T在运行时通过MakeGenericMethodor选择MakeGenericType),或元编程(发出 IL 以执行适当的投掷)。在所有其他情况下,当类型在运行时之前未知时,您会被困在objectordynamic中。

于 2011-05-09T08:19:28.270 回答
0

通常你不能以习惯的方式这样做,除非情况mInfo.ReturnType包含在编译时在当前上下文中可见的类型定义。例如,如果mInfo.ReturnTypebool定义,您可以简单地执行以下操作:

bool t = (bool)o;

但在这种情况下,使用 Activator 是没有意义的。当您尝试使用从另一个程序集加载的类型时,将使用 Activator 类,换句话说,该类型在编译时不可见。
所以答案你没有办法做到这一点。

于 2011-05-09T08:23:15.183 回答