2

我有一个带有 out 参数的委托和事件:

public delegate void ExampleDelegate(object sender, EventArgs e, out string value);

公共事件 ExampleDelegate 示例;

当我试图处理事件时:

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

我收到错误Parameter 3 must be declared with the 'out' 关键字

当我像这样输入建议的 out 关键字时:

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

我收到了额外的错误,找不到命名空间名称“val”的类型..etc

我究竟做错了什么?

4

2 回答 2

4

好吧,正如它在这里清楚地说明的那样,您需要指定的类型val

(sender, e, out string val)=> ...
于 2012-07-17T12:32:43.807 回答
2

您的事件处理程序不符合 .net 准则。

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

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

参考:事件教程

.NET 框架指南

尽管 C# 语言允许事件使用任何委托类型,但 .NET Framework 对应该用于事件的委托类型有一些更严格的准则。如果您打算让您的组件与 .NET Framework 一起使用,您可能需要遵循这些准则。

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

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

我添加这个只是为了完整性。

于 2012-07-17T12:40:44.723 回答