我想要一个命令结构。它将包含命令的名称,以及指向调用该命令时要执行的函数的指针。
public struct Command {
public string name;
public delegate commandDelegate();
}
这不起作用,因为委托没有类型。某些命令的函数将无效,而某些函数将返回一个值。他们的论点数也会有所不同。
我希望用这样的东西占据我的命令列表:
commands.Add(new Command { name = "exit", commandDelegate = new delegate void commandHelp(List<Command> commandList) });
这是我不理解的预期类型,因为我给它一个void类型,它匹配commandList方法的签名:
public static void commandHelp(List<Command> commandList) {
Console.Write("\n");
foreach (Command x in commandList) {
Console.WriteLine("{0,-10}{1,-50}", x.name, "description");
}
显然,我不知道如何解决这个问题。如果可能的话,我希望这样做,因为我只是想学习一些C#语言功能。
答案 0 :(得分:2)
您的Command
定义应为:
public struct Command {
public string name;
public Delegate commandDelegate;
}
然后您可以将Command
添加到您的列表中:
commands.Add(new Command {
name = "exit",
commandDelegate = new Action<List<Command>>(commandHelp)
});
要执行委托,您可以将DynamicInvoke
与参数一起使用,例如
commands[0].commandDelegate.DynamicInvoke(new List<Command> { });