我正在编写一个类来处理带有字符串值的单个事件中的事件,并根据字符串值将它们映射到并引发特定事件。
使用
等开关一切正常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的List),这样我就可以找到字符串事件的项目并提高相关事件。
欢迎任何提示/想法。
由于
答案 0 :(得分:4)
你可以使用字典。但是,要小心不要针对代表,而是对它们进行懒惰的评估。作为一个原因,代理是不可变的,因此你不会收到任何事件处理程序,否则。
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);
}
答案 1 :(得分:-1)
初始化一个字典,其中事件名称为键,事件处理程序为value。然后您可以轻松访问事件处理程序。
//初始化字典
Dictionary<string,EventHandler> dic=new Dictionary<string, EventHandler>();
dic["EVENT1"] = Event1Handler;
而不是switch case使用下面的代码
if (dic.ContainsKey(IncomingEventName))
{
var handler = dic[IncomingEventName];
if (handler != null) handler(this, args);
}