有一种方法可以做到这一点,但它几乎不需要破解。NDesk 使用“<>”作为特殊的默认处理程序。您所做的是跟踪“当前”参数,然后让默认处理程序根据当前参数决定如何处理这些值。这是我将值放入字典的示例。
static void Main(string[] args)
{
string currentParameter = "";
Dictionary<string, List<string>> parameters = new Dictionary<string, List<string>>();
OptionSet set = new OptionSet() {
{ "c", ".c files", v => currentParameter = "c" },
{ "j", ".j files", v => currentParameter = "j" },
{ "<>", v => {
List<string> values;
if (parameters.TryGetValue(currentParameter, out values))
{
values.Add(v);
}
else
{
values = new List<string> { v };
parameters.Add(currentParameter, values);
}
}
}
};
set.Parse(args);
foreach (var parameter in parameters)
{
Console.WriteLine("Parameter: {0}", parameter.Key);
foreach (var value in parameter.Value)
{
Console.WriteLine("\t{0}", value);
}
}
}
输出是:
参数:j
file1.j
file2.j
file3.j
参数:c
file4.c
file5.c
file6.c
file7.c