C# 如何强制转换CreateInstance的返回值

C# 如何强制转换CreateInstance的返回值,c#,reflection,casting,createinstance,C#,Reflection,Casting,Createinstance,当类型未知时,如何从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
——请注意,您可以在运行时通过
MakeGenericMethod
MakeGenericType
)或元编程(发出IL来执行适当的强制转换)来选择
T
。在所有其他情况下,当类型在运行时之前是未知的时,您只能使用
对象
动态
通常不能以习惯的方式执行,除非情况是
mInfo。ReturnType
包含类型定义,该定义在编译时在当前上下文中可见。例如,如果
mInfo.ReturnType
have
bool
定义,您只需执行以下操作:

bool t = (bool)o;
但在这种情况下,没有必要使用激活剂。当您尝试使用从另一个程序集加载的类型时,将使用Activator类。换句话说,该类型在编译时不可见。

所以答案是你没有办法做到这一点

您打算用
o
做什么?你没必要把它扔出去,我想我想用奶酪做的火箭把它送上月球。好吧,让我们假设我确实需要投下它。为什么没有任何区别。只有知道要将其强制转换到的类型(例如将其分配给该类型的变量)时,强制转换才有意义。安东的问题是合理的。@不管怎样-你在辱骂,而且你在技术上。。。不准确的。我已经编辑了你的评论。如果您有一个类型已知的反射用例,请显示它。@answer-“answer”声明的内容与注释相同。要求你澄清你的意图不是“噪音”。给出一个有用的答案是至关重要的。