我正在编写一个类来处理带有字符串值的单个事件中发生的事件,并将它们映射到并基于字符串值引发特定事件.
通过诸如以下的开关,一切都可以正常工作
SpecificHandler handler = null;
SpecificArgs args = new SpecificArgs(Id, Name);
switch (IncomingEventName)
{
case "EVENT1":
handler = Event1Handler;
break;
case "EVENT2":
handler = Event2Handler;
break;
... etc
}
if (handler != null) handler(this, args);
但是开关列表可能会太长,所以我想一种方法将字符串事件映射到数据结构中的处理程序(例如KeyValuePair列表),这样我就可以找到字符串事件的项目并引发关联事件.
任何提示/想法最欢迎.
谢谢
解决方法:
您可以只使用字典.但是,请注意不要针对委托人,而要对他们进行懒惰的评估.因此,委托是不可变的,因此您将不会收到任何事件处理程序.
private static Dictionary<string, Func<Yourtype, SpecificHandler>> dict = ...
dict.Add("Foo", x => x.FooHappened);
dict.Add("Bar", x => x.BarHappened);
并像这样使用它:
Func<SpecificHandler> handlerFunc;
SpecificArgs args = new SpecificArgs(...);
if (dict.TryGetValue(IncomingEventName, out handlerFunc))
{
SpecificHandler handler = handlerFunc(this);
if (handler != null) handler(this, args);
}