使用代理创建字典

时间:2014-10-13 13:56:27

标签: c# .net delegates

想问一下如何用委托制作字典。

这个想法是:

  1. 具有由" /"
  2. 定义的基于控制台的命令
  3. 使用字典来存储将调用我需要的函数的命令和del。
  4. 到目前为止:我通过创建活动设法做到了这一点

    delegate void CmdHandler(string[] cmdArgs);
        class CMDReader
        {
    
    
            public event CmdHandler _Print;
            public event CmdHandler _Help;
    
            private char cmdChar;
         }
    
    
    cmdReader._Print += new CmdHandler(Print);
    void Print(string[] args)
    

    但我正在寻找一种无需事件即可管理它的方法。我想我可以用字典做但不知道怎么做。

1 个答案:

答案 0 :(得分:2)

您可以将委托添加到Dictionary,然后使用索引键(我刚刚在此处假设命令的名称)来调用相应的操作。然而,这种模式的问题是参数上的松散类型(所有string[],隐含了关于每个参数的含义的知识),以及对所有方法(当前void)的公共返回类型的限制

public class CMDReader
{
    delegate void CmdHandler(string[] cmdArgs); // Or Action<string[]>

    private readonly IDictionary<string, CmdHandler> _commands;
    public CMDReader()
    {
        _commands = new Dictionary<string, CmdHandler>
        {
            {
                "Print", Print
            },
            {
                "Help", Help
            },
        };
    }

    public void InvokeCommand(string command, string[] args)
    {
        if (_commands.ContainsKey(command))
        {
            _commands[command].Invoke(args);
            // OR (_commands[command])(args);
        }
        else
        {
            Console.WriteLine("I don't know that command ...");
        }
    }

    private void Print(string[] args)
    {
      // Implementation
    }
    private void Help(string[] args)
    {
      // Implementation
    }
}