2

我正在阅读 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 中?

我真的很喜欢动词的设计方式,因为它使代码保持整洁。

4

1 回答 1

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;
}        
于 2021-05-19T19:34:47.463 回答