C#:如何检测输入控制台应用程序的参数?
在C#中如何检测控制台应用程序的输入 比方说,我希望控制台应用程序通过以下方式启动: 欢迎来到食物小屋 (光标在第一行后的此处键入内容) 我希望控制台应用程序检测两个命令: 1:/help-将显示一些帮助信息 2:/food pizza-t pepperoni-d pepsi-其中将显示“您想要一个有pepperoni和百事可乐的比萨饼吗?” 如果输入了/food pizza,我将如何首先检测输入的是什么/command,并读取诸如-t pepperoni(topping)和-d pepsi(to drink)之类的参数 我的主要问题是如何检测输入的第一个单词,如果是/help,则调用一些方法将帮助文本发布到控制台,或者如果命令是/food,则读取/food命令、-t和-p之后的内容C#:如何检测输入控制台应用程序的参数?,c#,C#,在C#中如何检测控制台应用程序的输入 比方说,我希望控制台应用程序通过以下方式启动: 欢迎来到食物小屋 (光标在第一行后的此处键入内容) 我希望控制台应用程序检测两个命令: 1:/help-将显示一些帮助信息 2:/food pizza-t pepperoni-d pepsi-其中将显示“您想要一个有pepperoni和百事可乐的比萨饼吗?” 如果输入了/food pizza,我将如何首先检测输入的是什么/command,并读取诸如-t pepperoni(topping)和-d pepsi(t
static void Main(string[] args)
{
Console.WriteLine("Welcome To Food Hut");
Console.ReadLine();
// if readline equals to /help then display some help text.
// if /food command is typed, read first argument after /food Pizza, -t TheTopping
// and -p ForWhatToDrink
// and then display, 'So you would like a Pizza with Pepperoni and Pepsi to drink?'
}
查看String.Contains我的建议如下:
string input = Console.ReadLine();
if (input == "/help") { }
else if (input.StartsWith("/food")) { }
else { //... }
Food:
1) Tofu
2) Tempeh
3) Seitan
4) Soup
Choice (1-4)? [users input]
Drink:
1) Pepsi
2) Coffee
3) Water
4) Tea
5) Juice
Choice (1-5)? [users input]
除此之外,下一个最简单的解决方案涉及正则表达式。如果您需要真正可扩展的东西,您可以研究lexer/解析器
但话说回来,有些事情告诉我你处理问题的方式不对。也许向用户显示菜单会更容易,如下所示:
string input = Console.ReadLine();
if (input == "/help") { }
else if (input.StartsWith("/food")) { }
else { //... }
Food:
1) Tofu
2) Tempeh
3) Seitan
4) Soup
Choice (1-4)? [users input]
Drink:
1) Pepsi
2) Coffee
3) Water
4) Tea
5) Juice
Choice (1-5)? [users input]
编号的菜单可能更容易让用户消化。Paul是对的,您需要使用各种字符串成员来完成此任务 如果您真的觉得自己很有进取心,可以考虑使用String.Text.RegularExpression类来解析文本,但首先要使用字符串成员
还可以尝试用谷歌搜索C#字符串解析。若要跳过基本的编码,您可能需要通过以下方式查看一下的命令行解析子项目。它是链接页上表格中的第一个。使用string.split查找由空格分隔的所有单词
input = Console.ReadLine();
string[] commands = input.Split(' ');
if(commands[0] == "/food")
{
if(commands[1] == "Pizza");
.....
}
我推荐。它功能强大,使用非常简单。此外,它还接受指定参数的各种方式,例如:
- /name=Stefan
- --name=Stefan
- --name=“多个单词”
- -名字“Stefan”
static void Main(string[] args)
{
Arguments cmdline = new Arguments(args);
Console.WriteLine(cmdline["name"]);
}
那么这个案例呢:
mssinp.exe -cf "C:\Temp\config.txt"
参数的值将拆分为
[0] 'C'
[1] '\Temp\config.txt'
遇到。一个干净的面向对象实现,可通过NuGet获得。这是唯一的方法!非常感谢理查德·洛佩斯和斯特凡·舒尔茨。反对的论点来自哪里?我的命令行项目无法识别它。@Jerm这肯定是旧的,您可能会发现这一点,但对于那些可能不知道的人…您必须先将Arguments类从Stefan链接中的代码项目文章复制到您的项目中,然后才能使用它。请不要将问题/注释作为答案发布