void A(object o)
{
...
Assembly a = Assembly.LoadFile(...);
Type t = a.GetType(@"namespace.className");
MethodInfo mi = t.GetMethod(@"MethodName");
mi.Invoke(instace, new Object[] {o});
....
}
我需要调用的方法接受另一种类型,我需要将该对象强制转换为该类型,但是,该类型仅在运行时才知道,那么我可以将对象转换/转换为仅在运行时已知的另一种类型吗?我只能改变方法A.
谢谢。答案 0 :(得分:1)
Reflection API仅处理object
引用。转换引用是对该引用的操作。它不会以任何方式影响对象。
因此,没有必要在这里施展任何东西。只需将o
传递给Invoke
,就像您已经在做的那样。 Reflection API验证o
的类型并将其传递给您要调用的方法。
答案 1 :(得分:1)
MethodInfo.Invoke(object instance, object[] arguments)
是动态调用。这意味着,铸造是自动进行的。如果抛出InvalidCastException
,则传递错误的参数或从内部代码抛出异常,而不是由传递给参数的对象引起的。
答案 2 :(得分:0)
这是我在需要几个类似消息时使用的代码,需要不同的处理。 Ordertype是自定义订单对象的Type实例。
var _ot = Activator.CreateInstance(ordertype);
var _otconvert = ordertype.GetMethod("ConvertRequestPayload");
object[] _params = new object[] {message};
var objectf = _otconvert.Invoke(_ot, _params);
var _as = Activator.CreateInstance(servicetype);
var _method = servicetype.GetMethod("StartProcess");
var rMessage = _method.Invoke(_as, new object[] {objectf});
基本上,Activator就是您所需要的。它允许您在运行时创建所需类型的对象。
答案 3 :(得分:0)
我将{object 0}
更改为{dynamic 0}
并且有效。