我有一个C#泛型接口interface IMonitor<in T> where T:IEvent
查询实现一个通用接口的类的泛型类型定义
所以监视器应该是一个通用的Event
型
然后我有一个类有监视器
List<IMonitor<IEvent>> monitors
我加入的IMonitor<IEvent>
实现它的集合。例如。 monitors.Add(new AConcreteMonitor<AConcreteEvent>())
如今,在Trigger(IEvent event)
方法,我想遍历显示器收集和通知都是相同的通用类型为event
的所有显示器。
我有:
void Trigger(IEvent event)
foreach (var monitor in monitors)
{
if (
monitor.GetType()
.GetInterfaces()
.Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == event.GetType()))
{
monitor.Notify(event);
}
}
}
(避免LINQ简化调试...)
条件从不计算真实的,即使有AConcreteMonitor<AConcreteEvent>
显示器集合中,并触发event
是AConcreteEvent
。调试时,GetGenericTypeDefinition()
评估为IMonitor'1
。
Qü(E S)T I O 4 N:
我如何获得的interface IMonitor<in T> where T:IEvent
实际T
,即AConcreteEvent
如果event
是在foreach循环AConcreteMonitor<AConcreteEvent>()
?