读取命令行开关

我正在尝试在C#应用程序中读取用户参数。 我知道如何根据位置阅读它们

string[] args = Environment.GetCommandLineArgs(); 

但是我想从开关中读取它们

 app.exe /f /d:foo 

我真的很难找到关于这样做的任何信息……

为什么不解析传递的参数数组并根据它们进行操作,就像这样

 foreach (string arg in args) { switch (arg.Substring(0, 2).ToUpper()) { case "/F": // process argument... break; case "/Z": // process arg... break; case "/D": paramD = arg.Substring(3); break; default: // do other stuff... break; } } 
 void Main(string[] args ) { foreach( var arg in args ) { // process each arg if needed, ie, // remove '-', '/', uppercase, whatever switch(arg) { case "blah": // ... } } } 

为此目的存在库,这使得整个过程变得更加容易,但如果这是一个一次性的应用程序,它可能是不值得的。 取决于命令行参数的复杂程度。

关于什么,

 // first is exe of executing program string[] args = Environment.CommandLine.Split('/').Skip(1).ToArray(); foreach (string arg in args) { string value = arg.Trim(); switch (value) { case "f": //... continue; } if (value.StartsWith("d:")) { value = value.Substring(2); // ... continue; } } 

我已经看到了几个循环遍历args字符串集合的答案 – 问题是你在点击正在寻找的开关后需要下一个项目。 我使用了集合的数组索引来获取下一个项目。

在我的示例中,我正在寻找服务器和端口/ S和/ P. 我希望这可以帮助别人:

  var server = string.Empty; var port = string.Empty; for(var x = 0; x < args.Count(); x++) { switch (args[x].Trim().ToUpper()) { case "/S": server = args[x + 1]; break; case "/P": port = args[x + 1]; break; } } 

好吧,基本上你已经完成了。 处理你从框架中获得的string[]数组并完成了。 没有内置的方法来实现您的要求。

像第三方解决方案可以看看

C#/ .NET命令行参数解析器

我是一个开源.NET命令行库的作者,可以满足您的需求: C#CLI 。

您可能还想阅读此问题以获取其他建议。

我相信你必须推出自己的实现。 在编写unit testing以评估新方法之后,我可能会开始考虑……

 foreach (string arg in args) { flagF = flagF || arg == "/f"; // assuming F is boolean flagD = flagD ?? (arg.Substring(0,3) =="/d:" ? arg.Substring(3) : null); }