我有一个这样的自定义委托:
public delegate List<int> ExpandableChildrenGetterDelegate(string parentId);
来自这个代表的事件是:
public event ExpandableChildrenGetterDelegate ExpandableChildrenGetting;
但Visual Studio设计器无法为此操作生成方法。我必须将我的代表改为:
public delegate IEnumerable ExpandableChildrenGetterDelegate(string parentId);
我如何解决这个问题,我明确地写了List<int>
而不是。{
IEnumerable
?
答案 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中的列表而不是返回新的