如何从事件</int>返回List <int>

时间:2014-01-28 05:05:29

标签: c# list events

我有一个这样的自定义委托:

public delegate List<int> ExpandableChildrenGetterDelegate(string parentId);

来自这个代表的事件是:

public event ExpandableChildrenGetterDelegate ExpandableChildrenGetting;

但Visual Studio设计器无法为此操作生成方法。我必须将我的代表改为:

public delegate IEnumerable ExpandableChildrenGetterDelegate(string parentId);

我如何解决这个问题,我明确地写了List<int>而不是。{ IEnumerable

1 个答案:

答案 0 :(得分:2)

这里的问题是Visual Studio正试图合理化它需要从事件返回的N个List<int>副本。每个接收值的处理程序中的一个。因此,它违反了非泛型IEnumerable的C#1.0行为。

从事件中获取此类信息的最佳方法是使其成为EventArgs实现的一部分。然后每个处理程序都可以直接附加到它

class MyEventArgs : EventArgs {
  public List<int> ExpandableChildren = new List<int>();
}

public delegate void ExpandableChildrenGetterDelegate(
  string parentId, 
  MyEventArgs e);

事件的消费者只会编辑事件args中的列表而不是返回新的