【发布时间】:2016-07-29 03:57:30
【问题描述】:
我正在尝试创建一个事件/消息传递系统,订阅者可以在其中订阅一般事件类型或特定事件类型。
我有一个事件类型字典,其中包含所述类型的订阅者列表,并且为了将事件通知给订阅者,我想获取这些列表中所有订阅的扁平列表,其中订阅的类型为等于或可从事件的类型分配;换句话说,当字典键符合条件时。
如何获取从字典键中查询的列表项的扁平列表(使用 linq)?
我的在制品代码:
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# 事件的新手,可能缺少可能影响或完全影响的关键信息更改此要求或我的实施。如果您强烈怀疑是这种情况,请在聊天中给我打电话进一步讨论!谢谢!
标签: c# linq dictionary