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

我如何在C#中检测控制台应用程序的输入?

比方说,我想通过编写启动控制台应用程序来启动:欢迎使用Food Hut(光标在第一行后输入内容)

我希望控制台应用程序检测两个命令:

1:/ help – 这将显示一些帮助乱码。

2:/食物披萨-t pepperoni -d pepsi – 将显示“所以你想要一个与意大利辣香肠和百事可乐一起喝的比萨饼?”

如果/食用比萨饼被打字,我将如何继续检测首先输入的内容/命令以及读取-t pepperoni(打顶)和-d pepsi(喝酒)等参数?

我的主要问题是弄清楚如何检测有史以来的第一个单词,弄清楚如果是/ 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?' } 

我推荐Richard Lopes的命令行参数解析器 。 它function强大且使用起来非常简单。 此外,它接受指定参数的各种方法,例如:

  • /名称=斯蒂芬
  • –name =斯蒂芬
  • –name =“多个单词”
  • -name’Stefan’

示例代码:

 static void Main(string[] args) { Arguments cmdline = new Arguments(args); Console.WriteLine(cmdline["name"]); } 

我的直接建议是这样的:

 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] 

编号菜单可能会让您的用户更容易消化。

使用string.split查找由空格分隔的所有单词。

 input = Console.ReadLine(); string[] commands = input.Split(' '); if(commands[0] == "/food") { if(commands[1] == "Pizza"); ..... } 

要跳过编码基础知识,您可能需要查看Chris Sells在Genghis项目的命令行解析子项目中的内容。 它是链接页面表格中的第一个。

查看String.Contains

Paul是对的,您需要使用各种String成员来完成此任务。

MSDN

如果您感觉真的是企业,可以使用String.Text.RegularExpression类来解析文本,但是首先使用字符串成员。

也尝试用谷歌搜索C#String解析。

来到gsscoder /命令行 。 一个干净的面向对象的实现,可通过NuGet获得。

这个案子怎么样:

 mssinp.exe -cf "C:\Temp\config.txt" 

参数的值将被拆分为

 [0] 'C' [1] '\Temp\config.txt'