c# - Delegate.DynamicInvoke 不能使用可选参数?
问题描述
请看这段代码:
// this method have a optional parameter
public static void Foo(int a = 3) { }
var del = new Action<int>(Foo);
// pass Type.Missing
del.DynamicInvoke(Type.Missing);
// or
del.DynamicInvoke(new object[] { Type.Missing });
它会得到异常System.ArgumentException
:
System.ArgumentException: Missing parameter does not have a default value.
Parameter name: parameters
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at xxx.btnSetting_Click(Object sender, EventArgs e) in xxx\FmMain.cs:line 106
请帮忙。
解决方案
我猜想使用 of 的问题Action<int>
似乎不支持可选参数的动态调用。这个样本工作正常
// this method have a optional parameter
public static void Foo(int a = 3) { }
delegate void SampleDelegate(int a = 3);
static void Main(string[] args)
{
SampleDelegate del = Foo;
// pass Type.Missing
del.DynamicInvoke(Type.Missing);
}
推荐阅读
- excel - Unix时间戳到CET excel公式
- android - 更换三星键盘中的键
- networking - 具有 TLS 客户端身份验证的 UrlSession
- android - 使用 Junit5 和 mockito 进行单元测试
- javascript - 为什么箭头功能在 IE 中不起作用?
- android - Jetpack compose - 在文本后面绘制背景
- amazon-web-services - 将数据从雪花保存到 S3 存储桶作为 XLSX 文件
- javascript - 在 React 组件之外访问 props func
- selenium - 如何为特定配置文件重置 chrome 中的缩放设置
- java - JButtons 消失了