C# 在运行时将对象强制转换为其他类型
我需要调用的方法接受另一种类型,我需要将对象强制转换为该类型,但是,该类型仅在运行时已知,因此我可以将对象转换/强制转换为仅在运行时已知的另一种类型吗?我只能改变方法AC# 在运行时将对象强制转换为其他类型,c#,casting,C#,Casting,我需要调用的方法接受另一种类型,我需要将对象强制转换为该类型,但是,该类型仅在运行时已知,因此我可以将对象转换/强制转换为仅在运行时已知的另一种类型吗?我只能改变方法A 谢谢。反射API只处理对象引用。强制转换引用是对该引用的操作。它不会以任何方式影响对象 因此,没有必要在这里铸造任何东西。只需将o传递到Invoke,就像您已经在做的那样。反射API验证o的类型,并将其传递给要调用的方法。方法信息调用(对象实例,对象[]参数)是动态调用。也就是说,铸件是自动制作的。如果抛出的是InvalidCa
谢谢。反射API只处理
对象
引用。强制转换引用是对该引用的操作。它不会以任何方式影响对象
因此,没有必要在这里铸造任何东西。只需将
o
传递到Invoke
,就像您已经在做的那样。反射API验证o
的类型,并将其传递给要调用的方法。方法信息调用(对象实例,对象[]参数)是动态调用。也就是说,铸件是自动制作的。如果抛出的是InvalidCastException,那么您传递了错误的参数,或者异常是从内部代码抛出的,并且不是由传递给参数的对象引起的。这是我在需要几个类似消息时使用的代码,需要不同的处理。Ordertype是自定义订单对象的类型实例
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});
....
}
基本上,激活剂是你所需要的。它允许您在运行时创建所需类型的对象 我将
{object 0}
更改为{dynamic 0}
,它成功了。是否尝试调用方法名的特定重载?这是我能想到的需要参数类型的唯一原因。我不想创建另一个实例。。。我想使用{This}实例。我不认为使用您已经拥有的实例可以实现什么,特别是如果您想强制转换或转换它。如果我错了,那么我也会学到一些新东西。
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});