使用out参数处理委托

时间:2012-07-17 12:27:13

标签: c# anonymous-methods

我有一个带有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'的类型..等等

我做错了什么?

2 个答案:

答案 0 :(得分:4)

好吧,因为它清楚地说here,您需要指定val的类型:

(sender, e, out string val)=> ...

答案 1 :(得分:2)

您的事件处理程序未对.net准则进行确认。

如果你必须像那样使用它,请使用委托,而不是事件。

如果你有两个事件处理程序修改你的out参数,你会遇到麻烦。

参考:Events Tutorial

  

.NET Framework指南

     

虽然C#语言允许事件使用任何委托类型,但是   .NET Framework对委托类型有一些更严格的指导   应该用于事件。如果您打算使用您的组件   使用.NET Framework,您可能希望遵循这些   准则。

     

.NET Framework指南指出用于的委托类型   一个事件应该采取两个参数,一个"对象源"参数   指示事件的来源,以及" e"参数   封装有关该事件的任何其他信息。的类型   " e"参数应该来自EventArgs类。对于活动   .NET Framework没有使用任何其他信息   已经定义了一个合适的委托类型:EventHandler。

zmbq已经为您提供了如何纠正错误的答案。

我只是为了完整性而添加此内容。

相关问题