我是 NDesk.Options 库的新手。无法找出解析简单项目列表的最简单方法。
示例: prog --items=item1 item2 item3 (我想在代码中使用 List items)
它应该支持引用以及我想将项目列表用作文件或目录名称的列表。
prog --items="c:\a\b\c.txt" "c:\prog files\d.txt" prog --dirs="c:\prog files\" "d:\x\y\space在目录名中”
我是 NDesk.Options 库的新手。无法找出解析简单项目列表的最简单方法。
示例: prog --items=item1 item2 item3 (我想在代码中使用 List items)
它应该支持引用以及我想将项目列表用作文件或目录名称的列表。
prog --items="c:\a\b\c.txt" "c:\prog files\d.txt" prog --dirs="c:\prog files\" "d:\x\y\space在目录名中”
您可以使用“<>”输入,它表示没有标志与输入关联。由于选项是从左到右读取的,因此您可以在遇到起始标志时设置“currentParameter”标志,并假设任何没有标志的后续输入都是列表的一部分。这是一个示例,我们可以将 List 指定为输入文件,并将 Dictionary (Parameters) 指定为键值对列表。当然也可以使用其他变体。
OptionSet options = new OptionSet()
{
{"f|file", "a list of files" , v => {
currentParameter = "f";
}},
{"p", @"Parameter values to use for variable resolution in the xml - use the form 'Name=Value'. a ':' or ';' may be used in place of the equals sign", v => {
currentParameter = "p";
}},
{ "<>", v => {
switch(currentParameter) {
case "p":
string[] items = v.Split(new[]{'=', ':', ';'}, 2);
Parameters.Add(items[0], items[1]);
break;
case "f":
Files.Add(Path.Combine(Environment.CurrentDirectory, v));
break;
}
}}
};
options.Parse(args);
接受单个参数的值列表的另一种方法是多次接受相同的参数。例如,
编 --file="c:\a\b\c.txt" --file="c:\prog 文件\d.txt"
在这种情况下,您的代码将如下所示。
List<string> fileList = new List<string>();
OptionSet options = new OptionSet
{
{ "f|file", "File name. Repeat argument for each file.", v =>
{
fileList.Add(v);
}
}
};
options.Parse(args);
恕我直言,此代码更易于阅读和维护。