想问一下如何用委托制作字典。
这个想法是:
到目前为止:我通过创建活动设法做到了这一点
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)
但我正在寻找一种无需事件即可管理它的方法。我想我可以用字典做但不知道怎么做。
答案 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
}
}