gpt4 book ai didi

c# - MethodInfo 在 C# 中调用重载方法

转载 作者:行者123 更新时间:2023-11-30 14:52:11 24 4
gpt4 key购买 nike

我正在使用 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,Binder Binder ,Object[] 参数,CultureInfo 文化) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder Binder ,Object[] 参数,CultureInfo 文化) 在 System.Reflection.MethodBase.Invoke(对象 obj,对象 [] 参数) 在 e:\sample\BDw.cs:line 146 中的 Download.BasicDownload.BasicFileDownload(Device 设备)

最佳答案

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

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

这比使用反射获取所有类型的方法然后过滤它们更有效。

您的代码不起作用,因为反射返回的方法顺序不一定与您在代码中声明它们的顺序相同。

关于c# - MethodInfo 在 C# 中调用重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com