C#Chain代表与“未知”签名一起

时间:2012-04-21 19:56:01

标签: c# delegates method-chaining

我想做以下事情:

private static Dictionary<string, Delegate> handlers = new Dictionary<string, Delegate>();
private static void RecievedMessage(object sender, RecievedMessageEventArgs e) {
  if(e == null  || e.Message == null) return;

  if(e.Message is RegisterMethodMessage) {
    var registerMethodMsg = (RegisterMethodMessage)e.Message;
    if(handlers.ContainsKey(registerMethodMsg.MethodName)) {
      handlers[registerMethodMsg.MethodName] += registerMethodMsg.Handler; //Error
    } else {
      handlers.Add(registerMethodMsg.MethodName, registerMethodMsg.Handler);
    }
  }
}

使用字典中相同的键添加到链中的委托具有相同的方法签名 如果我用“Action”这样的特定代码替换“Delegate”,上面的代码就可以了。

所以我的问题是:
是否有可能在没有替换且没有大量“黑客攻击”的情况下做同样的事情?

1 个答案:

答案 0 :(得分:1)

有什么理由你不能这样做:

handlers[registerMethodMsg.MethodName] =
    Delegate.Combine(
        handlers[registerMethodMsg.MethodName],
        registerMethodMsg.Handler);