与输出参数

问题描述:

处理委托我有一个委托和事件与一个输出参数:与输出参数

公众委托无效ExampleDelegate(对象发件人,EventArgs的,出字符串值);

公共事件ExampleDelegate示例;

当我试图对事件进行处理:

mg.Example += (sender, e, val) => 
{ 
    //do stuff 
}; 

,我发现了错误参数3必须声明与“出”关键字

当我抛出建议的关键字像这样:

mg.Example += (sender, e, out val) => 
{ 
    //do stuff 
}; 

我得到和额外的错误命名空间名称'val'的类型无法找到..等等

我在做什么错?

+4

你打破了事件处理程序的设计。改为创建自己的EventArgs类。 – 2012-07-17 12:33:50

+1

@AmiramKorach您的答案是我正在寻找的答案 – 2012-07-17 13:24:04

事件处理程序没有确认到.NET的准则。

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

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

参见:Events Tutorial

.NET框架准则

虽然C#语言允许事件使用任何委托类型, .NET框架对委托类型 应该是一些严格的指导方针用于事件。如果您打算将组件与.NET Framework一起使用 ,则可能需要遵循这些 准则。

.NET框架准则指出,用于 委托类型的事件应采取两个参数,一个“对象源”参数 指示事件的源,和一个“e”参数 封装的任何附加信息关于事件。 “e”参数的类型应该从EventArgs类派生。对于不使用任何附加信息的事件 ,.NET Framework 已经定义了适当的委托类型:EventHandler。

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

我加入这只是为了完整性。

+0

谢谢,感谢 – 2012-07-17 13:07:23

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

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

关于您链接到的答案的说明表示您需要指定* all *参数的类型。 – 2012-07-17 12:42:39

+0

似乎这样做。 – 2012-07-17 13:06:28