string server = null;
string database = null;
var p = new OptionSet () {
{ "S", v => server = v },
{ "D", v => database = v },
};
List<string> extra = p.Parse (args); // 'args' comes from Main (string [] args)
...
如果要生成自动帮助,您可以执行以下操作:
string server = null;
string database = null;
var p = new OptionSet () {
{ "S", "Server name", v => server = v },
{ "D", "Database name", v => database = v },
{ "h", "Display help", v => { show_help = true; }},
};
List<string> extra = p.Parse (args); // 'args' comes from Main (string [] args)
if (show_help) {
Console.WriteLine ("Name of your program and brief description");
p.WriteOptionDescriptions (Console.Out);
Environment.Exit (0);
}
...
public static class NamedArgs
{
public static IDictionary<string, string> ToDictionary(string[] args)
{
var dict = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
for (int i = 0; i < args.Length; i++)
if (args[i].StartsWith("-"))
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("-"))
dict.Add(args[i], string.Empty);
else
dict.Add(args[i], args[++i]);
}
return dict;
}
}
它的用法如下:
var namedArgs = NamedArgs.ToDictionary(args);
if(namedArgs.TryGetValue("-s", out string myServerName) == false)
throw new ArgumentNullException("-s");
Console.WriteLine($"Selected server: '{myServerName}'");
4条答案
按热度按时间0x6upsns1#
在可执行文件名之后输入的所有内容都称为命令行参数。
但是,是否使用破折号、斜线或其他类型的关键字完全取决于应用程序的实现。
如果您想保存一些精力,您可能希望使用命令行解析器。
下面是一个开源的示例,您可以使用它。http://www.codeplex.com/cmdline
atmip9wb2#
我喜欢使用NDesk.Options。你只需要把源文件添加到你的项目中。它真的很容易使用,并且有很好的文档。代码看起来像:
如果要生成自动帮助,您可以执行以下操作:
ltskdhd13#
把它放在arg-processing方法中:
我经常把它放到“runner”类型的构造函数中。
这个逻辑假设arg处理是在try.. catch中完成的,并且在catch中显示Usage,如下所示:
igsr9ssn4#
您可以编写一个将
string[]
转换为Dictionary<string, string>
的方法:它的用法如下: