C# 在运行时将对象强制转换为其他类型

C# 在运行时将对象强制转换为其他类型,c#,casting,C#,Casting,我需要调用的方法接受另一种类型,我需要将对象强制转换为该类型,但是,该类型仅在运行时已知,因此我可以将对象转换/强制转换为仅在运行时已知的另一种类型吗?我只能改变方法A 谢谢。反射API只处理对象引用。强制转换引用是对该引用的操作。它不会以任何方式影响对象 因此,没有必要在这里铸造任何东西。只需将o传递到Invoke,就像您已经在做的那样。反射API验证o的类型,并将其传递给要调用的方法。方法信息调用(对象实例,对象[]参数)是动态调用。也就是说,铸件是自动制作的。如果抛出的是InvalidCa

我需要调用的方法接受另一种类型,我需要将对象强制转换为该类型,但是,该类型仅在运行时已知,因此我可以将对象转换/强制转换为仅在运行时已知的另一种类型吗?我只能改变方法A


谢谢。

反射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});