我正在阅读CommandLineParser文档,并对这里的功能设计方式非常感兴趣:
我基本上有一个命令行应用程序,需要在其中设置不同的参数。像下面这样
MyApp.exe -a val1 -b val2 -c -d
我要实现的是,如果命令行应用程序中存在-c,我想获取 -a val1 -b val2 生成的结果,然后调用下一个函数结果以及 -c 的操作。
在这种情况下:
int Main(string[] args) {
return CommandLine.Parser.Default.ParseArguments<AddOptions, CommitOptions, CloneOptions>(args)
.MapResult(
(AddOptions opts) => RunAddAndReturnExitCode(opts),
(CommitOptions opts) => RunCommitAndReturnExitCode(opts),
errs => 1);
}
如何获取 RunAddAndReturnExitCode(opts)的结果并将其添加到RunCommitAndReturnExitCode中?
我真的很喜欢动词的设计方式,因为它可以使代码保持整洁。
答案 0 :(得分:0)
如果您使用命名静态方法,则不需要匿名委托。
static int Main(string[] args)
{
return Parser.Default.ParseArguments<SubmitProcessOptions, CancelProcessOptions, GetProcessOptions>(args).MapResult<SubmitProcessOptions, CancelProcessOptions, GetProcessOptions, int>(RunSubmitProcess, RunCancelProcess, RunGetProcess, HandleParseError);
}
static int RunSubmitProcess(SubmitProcessOptions submitProcessOptions)
{
Console.WriteLine($"ProcessKey: {submitProcessOptions.ProcessKey}");
foreach (var parameter in submitProcessOptions.Parameters)
{
Console.WriteLine($"Parameter: {parameter}");
}
return 0;
}
static int RunCancelProcess(CancelProcessOptions cancelProcessOptions)
{
Console.WriteLine($"ProcessKey: {cancelProcessOptions.ProcessKey}");
return 0;
}
static int RunGetProcess(GetProcessOptions getProcessOptions)
{
Console.WriteLine($"ProcessKey: {getProcessOptions.ProcessKey}");
return 0;
}
static int HandleParseError(IEnumerable<Error> errs)
{
//handle errors
return 1;
}