2014-01-28 46 views
3

我有一個自定義委託像這樣返回列表 如何從一個事件

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

,並從該委託我的事件是:

public event ExpandableChildrenGetterDelegate ExpandableChildrenGetting; 

但Visual Studio設計不能爲此產生方法行動。我必須改變我的委託:

public delegate IEnumerable ExpandableChildrenGetterDelegate(string parentId); 

我怎樣才能解決這個問題,那我明確寫入List<int>代替 IEnumerable

回答

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); 

本次活動的消費者只想編輯事件參數列表,而不是返回一個新

+0

這種做法是很好的,但我創建一個組件其他用戶將與這個組件一起工作,並且我需要明確顯示事件中存在的任何事情,並且需要返回。 –