我正在使用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返回的方法的顺序不一定与您在代码中声明它们的顺序相同。