C#:如何检测输入控制台应用程序的参数?

C#:如何检测输入控制台应用程序的参数?,c#,C#,在C#中如何检测控制台应用程序的输入 比方说,我希望控制台应用程序通过以下方式启动: 欢迎来到食物小屋 (光标在第一行后的此处键入内容) 我希望控制台应用程序检测两个命令: 1:/help-将显示一些帮助信息 2:/food pizza-t pepperoni-d pepsi-其中将显示“您想要一个有pepperoni和百事可乐的比萨饼吗?” 如果输入了/food pizza,我将如何首先检测输入的是什么/command,并读取诸如-t pepperoni(topping)和-d pepsi(t

在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之后的内容

    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链接中的代码项目文章复制到您的项目中,然后才能使用它。请不要将问题/注释作为答案发布