我正在尝试创建一个事件/消息传递系统,订阅者可以订阅一般事件类型或特定事件类型。如何从字典键值查询中列出值列表中的扁平列表?
我有一个事件类型的字典,其中包含所述类型的订阅者列表,并且为了将事件通知给订阅者,我希望获得这些列表中的所有订阅的展开列表,其中订阅是类型的等于或可从事件类型分配;换句话说,当字典键符合这个标准时。
如何获得从字典的键(使用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