我有一个带有out参数的委托和事件:
public delegate void ExampleDelegate(object sender,EventArgs e,out string value);
公共事件ExampleDelegate示例;
当我试图处理这个事件时:
mg.Example += (sender, e, val) =>
{
//do stuff
};
我收到错误参数3必须使用'out'关键字声明
当我投掷建议的out关键字时,如下:
mg.Example += (sender, e, out val) =>
{
//do stuff
};
我收到了额外的错误无法找到命名空间名称'val'的类型..等等
我做错了什么?
答案 0 :(得分:4)
好吧,因为它清楚地说here,您需要指定val
的类型:
(sender, e, out string val)=> ...
答案 1 :(得分:2)
您的事件处理程序未对.net准则进行确认。
如果你必须像那样使用它,请使用委托,而不是事件。
如果你有两个事件处理程序修改你的out参数,你会遇到麻烦。
.NET Framework指南
虽然C#语言允许事件使用任何委托类型,但是 .NET Framework对委托类型有一些更严格的指导 应该用于事件。如果您打算使用您的组件 使用.NET Framework,您可能希望遵循这些 准则。
.NET Framework指南指出用于的委托类型 一个事件应该采取两个参数,一个"对象源"参数 指示事件的来源,以及" e"参数 封装有关该事件的任何其他信息。的类型 " e"参数应该来自EventArgs类。对于活动 .NET Framework没有使用任何其他信息 已经定义了一个合适的委托类型:EventHandler。
zmbq已经为您提供了如何纠正错误的答案。
我只是为了完整性而添加此内容。