我正在使用MethodInfo调用重载的方法,这使我抛出异常TargetParameterCount不匹配,以下是我的代码

public class Device
{
    public bool Send(byte[] d, int l, int t)
    {
        return this.Send(d, 0, l, t);
    }
 public bool Send(byte[] d, int l, int t,int t)
    {
        return true;
    }
}


我在其他班上叫这些功能。

public class dw
{
public bool BasicFileDownload(Device device)

{
Type devType = device.GetType();
byte [] dbuf = readbuff();
MethodInfo methodSend = deviceType.GetMethods().Where(m => m.Name =="Send").Last();
object invokeSend = methodOpen.Invoke(device, new object[] {dbuf,0,10,100 });
}
}


现在,我尝试调用带有4个参数的Send,但是它抛出错误。

System.Reflection.TargetParameterCountException:参数计数不匹配。
   在System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj,BindingFlags invokeAttr,活页夹活页夹,Object []参数,CultureInfo文化)
   在System.Reflection.RuntimeMethodInfo.Invoke处(对象obj,BindingFlags invokeAttr,活页夹活页夹,Object []参数,CultureInfo文化)
   在System.Reflection.MethodBase.Invoke处(Object obj,Object []参数)
   在Download:BasicDownload.BasicFileDownload(设备设备)中的e:\ sample \ BDw.cs:line 146中

最佳答案

您可以直接通过其签名获得正确的Send方法。

var signature = new[] {typeof (byte[]), typeof (int), typeof (int), typeof (int)};
MethodInfo methodSend = deviceType.GetMethod("Send", signature);


这比使用Reflection获取所有类型的方法然后对其进行过滤更有效。

您的代码无法正常工作,因为Reflection返回的方法的顺序不一定与您在代码中声明它们的顺序相同。

10-08 07:40