如何转换CreateInstance的返回值

时间:2011-05-09 08:03:34

标签: c# reflection casting createinstance

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

例如,在此代码中:

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

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

2 个答案:

答案 0 :(得分:2)

Casting(至少,通常是你通常的意思)是一个编译时/静态类型的操作。在运行时使用未知类型甚至理解的唯一方法是处理泛型(将其转换为某些T - 并注意您可以选择T at运行时通过MakeGenericMethodMakeGenericType),或使用元编程(发送IL来进行适当的转换)。在所有其他情况下,当运行时类型未知时,您会遇到objectdynamic

答案 1 :(得分:0)

除了情况mInfo.ReturnType包含在编译时在当前上下文中可见的类型定义之外,通常您不能以习惯的方式执行此操作。例如,如果mInfo.ReturnType具有bool定义,您只需执行以下操作:

bool t = (bool)o;

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