C# 使用委托创建字典

C# 使用委托创建字典,c#,.net,delegates,C#,.net,Delegates,想问一下如何与学员一起制作词典 这个想法是: 具有由“/”定义的基于控制台的命令 使用dictionary存储将调用所需函数的命令和del 到目前为止,我已经做到了:我通过创建事件成功地做到了这一点 delegate void CmdHandler(string[] cmdArgs); class CMDReader { public event CmdHandler _Print; public event CmdHandler _Help;

想问一下如何与学员一起制作词典

这个想法是:

  • 具有由“/”定义的基于控制台的命令
  • 使用dictionary存储将调用所需函数的命令和del 到目前为止,我已经做到了:我通过创建事件成功地做到了这一点

    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)
    

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

    您可以将委托添加到
    字典
    ,然后使用索引器键(我刚才假设了这里的命令名)调用相应的操作。然而,这种模式的问题在于参数的输入不严格(所有
    string[]
    ,对每个参数的含义都有隐含的了解),以及对所有方法的公共返回类型的限制(当前为
    void

    公共类CMDReader
    {
    委托void CmdHandler(字符串[]cmdArgs);//或操作
    专用只读IDictionary_命令;
    公共CMDReader()
    {
    _commands=新字典
    {
    {
    “打印”,打印
    },
    {
    “救命”,救命
    },
    };
    }
    public void InvokeCommand(string命令,string[]args)
    {
    if(_commands.ContainsKey(command))
    {
    _命令[command].Invoke(args);
    //或(_commands[command])(args);
    }
    其他的
    {
    WriteLine(“我不知道那个命令…”);
    }
    }
    私有无效打印(字符串[]args)
    {
    //实施
    }
    私有void帮助(字符串[]args)
    {
    //实施
    }
    }
    
    是什么阻止了您使用字典进行尝试?代码中不清楚:是什么决定了调用哪个方法/委托/什么?
    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
        }
    }