C#Events - 根据字符串提升特定事件

时间:2015-05-26 14:04:31

标签: c# events

我正在编写一个类来处理带有字符串值的单个事件中的事件,并根据字符串值将它们映射到并引发特定事件。

使用

等开关一切正常
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),这样我就可以找到字符串事件的项目并提高相关事件。

欢迎任何提示/想法。

由于

2 个答案:

答案 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);
            }