这似乎是个奇怪的问题,所以我会尽可能简单地解释一下。我在C#中制作像CMD这样的应用程序,我需要像'ping'这样的命令。我有一个switch语句,它检查输入的命令并执行它。这是:
switch (CommandName)
{
case "intro":
{
Console.WriteLine("intro");
CommandListen();
}
break;
case "clear":
{
CommandFolder.CmdClear cmd = new CommandFolder.CmdClear();
cmd.Execute();
CommandListen();
}
break;
case "ping":
{
CommandFolder.CmdPing cmd = new CommandFolder.CmdPing();
cmd.Execute(CommandName);
CommandListen();
}
break;
case "exit":
{
CommandFolder.CmdExit cmd = new CommandFolder.CmdExit();
cmd.Execute();
}
break;
default:
CommandListen();
break;
}
我不知道如何使用命令的参数,即ping [ip / url] [extra]。如果我输入'ping'它会运行并执行命令,但如果我输入'ping www.google.com',它会出现我无法识别的命令错误。我需要一种方法来检查命令的第一部分,然后传递参数。
如果这很模糊,我道歉,我只是不知道如何说出来。
答案 0 :(得分:0)
您需要定义语法并为其编写解析器。正如@Lasse和@Dan在评论中所建议的那样,它可以像“一个命令及其参数被一个空格分隔”一样简单,这将使解析代码的天真实现如下所示:
string commandParts = CommandName.Split(" ");
string commandName = commandParts[0];
var arguments = commandParts.Skip(1).ToList();
var command = new SomeCommand(arguments);
此代码在空格(“”)上拆分输入,将第一个结果作为命令,将可选的余数作为参数(输入的参数不会变为空arguments
列表)。
当然,您需要在未输入命令时添加用于错误处理的代码,或者如果要支持输入多个空格,则需要调整拆分代码。