您可以将所有命令放入Dictionary<string, someDelegate>
;如果您可以接受具有相同返回类型的所有命令。
我使用了字符串并设置了一些命令。
我利用params避免丑陋的关键字new object[]
每次通话时。
您仍然需要对参数进行强制转换,除非您可以将它们全部设置为一种类型。 (这实际上可能不是一个坏主意,因为它们都来自输入字符串..)
这是一个例子:
public delegate string cmdDel(params object[] args);
Dictionary<string, cmdDel> cmd = new Dictionary<string, cmdDel>();
添加几个功能:
cmd.Add("clear", cmd_clear);
cmd.Add("exit", cmd_exit);
cmd.Add("add", cmd_add);
cmd.Add("log", cmd_log);
有了这些机构:
public string cmd_clear(params object[] args)
{
return "cleared";
}
public string cmd_exit(params object[] args)
{
return "exit";
}
public string cmd_add(params object[] args)
{
return ((int)args[0] + (int)args[1]).ToString();
}
public string cmd_log(params object[] args)
{
StringBuilder log = new StringBuilder();
foreach (object a in args) log.Append(a.ToString() + " ");
return log.ToString();
}
并测试:
Console.WriteLine(cmd["clear"]());
Console.WriteLine(cmd["add"]( 23, 42));
Console.WriteLine(cmd["log"]( 23, "+" + 42, "=", cmd["add"]( 23, 42) ));
Console.WriteLine(cmd["exit"]());
cleared
65
23 + 42 = 65
exit
当然,您仍然需要(至少)使用与命令一样多的行进行设置。并且还需要进行类似数量的错误检查。
但命令处理部分可以变得非常简单。