当类型未知时,如何从CreateInstance转换返回值?
例如,在此代码中:
MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);
如何将o转换为mInfo.ReturnType包含的内容?
答案 0 :(得分:2)
Casting(至少,通常是你通常的意思)是一个编译时/静态类型的操作。在运行时使用未知类型甚至理解的唯一方法是处理泛型(将其转换为某些T
- 并注意您可以选择T
at运行时通过MakeGenericMethod
或MakeGenericType
),或使用元编程(发送IL来进行适当的转换)。在所有其他情况下,当运行时类型未知时,您会遇到object
或dynamic
。
答案 1 :(得分:0)
除了情况mInfo.ReturnType
包含在编译时在当前上下文中可见的类型定义之外,通常您不能以习惯的方式执行此操作。例如,如果mInfo.ReturnType
具有bool
定义,您只需执行以下操作:
bool t = (bool)o;
但在这种情况下,没有使用Activator的可能性。当您尝试使用从另一个程序集加载的类型时使用Activator类,而在编译时该类型不可见。
所以答案你没办法做到这一点。