我在运行时处理正确类型时遇到问题。
我希望我的代码根据参数类型动态检测应该调用哪个处理程序。我不想在代码中将 TEvent 转换为正确的类型。
所有处理程序都继承自我的界面:
public interface IAbstractHandler < in T>
{
void Handle(T evnt);
}
例子:
public class SpecificEventHandler: IAbstractHandler< SpecificEvent>
{
public void Handle(SpecificEvent evnt) {
....
}
}
TEvent.cs:
public class TEvent
{
}
处理程序中使用的所有其他事件都源自 TEvent。
这是一些代码:
List<TEvent> eventItems = new List<TEvent>();
....
foreach (var evt in eventItems) {
...
dynamic eventHandler = ResolveEventHandler(evt.GetType().Name);
if (evt is MySubtypeEvent subEvent) {
eventHandler.Handle(subEvent); // <-- this works, but I don't want this.
}
eventHandler.Handle(evt); // <-- And this fails, because 'evt' is seemingly
// a TEvent even though it's of the correct subclass.
}
我正在寻找的是一种使 'evt' 不是 TEvent 而是真正类型的方法,但无需对其进行硬编码,这将使我的 'eventHandler.Handle()' 方法起作用(我认为)。
相关分类