我正在嘗試創建一個事件/消息傳遞系統,訂閱者可以訂閱一般事件類型或特定事件類型。如何從字典鍵值查詢中列出值列表中的扁平列表?
我有一個事件類型的字典,其中包含所述類型的訂閱者列表,並且爲了將事件通知給訂閱者,我希望獲得這些列表中的所有訂閱的展開列表,其中訂閱是類型的等於或可從事件類型分配;換句話說,當字典鍵符合這個標準時。
如何獲得從字典的鍵(使用linq)查詢的列表項扁平列表?
我WIP代碼:
private Dictionary<Type, List<SomeEventDelegate>> subscriptions;
// ...other code...
public void Dispatch(SomeEvent someEvent)
{
// This should get the Key-Value pairs... How do I get a flattened list of all items in the values (which are lists themselves)?
List<SomeEventDelegate> subscribers =
from subscription in subscriptions
where subscription.Key.IsAssignableFrom(someEvent.GetType())
select subscription;
//After I have the flattened list, I will dispatch the event to each subscriber here, in a foreach loop.
}
在一個側面說明,我不認爲你應該這樣做。您不需要像那樣管理訂閱者,這是內置於代表和事件中的。如果你需要更多的控制,那麼圍繞這個框架構建的框架就是正確的。 –
@JeffMercado對於我的具體需求,訂閱者需要不知道事件源對象,並且只能知道訂閱這些事件的事件類型。 (它們可能會接收到觸發/源對象的引用,具體取決於事件類型;但這不是必要的或總體保證)---但是,我是C#事件的新手,可能會丟失可能影響或完全影響的關鍵信息改變這個要求或我的實施。如果您強烈懷疑是這種情況,請打電話給我聊天進一步討論!謝謝! – XenoRo