2

使用CommandLineParser我可以定义一组这样的互斥选项(取自wiki):

class OptionsMutuallyExclusive
{
  //define commands in set(group) named web
  [Option(SetName = "web")]
  public string DocumentRoot { get; set; }
  [Option(SetName  = "web")]
  public bool EnableJavaScript { get; set; }

  //define other commands in set(group) named ftp
  [Option(SetName  = "ftp")]
  public string FtpDirectory { get; set; }
  [Option(SetName  = "ftp")]
  public bool AnonymousLogin { get; set; }

  //Common: the next option can be used with any set because it's not included in a set
  [Option('r')]
  public string UrlAddress { get; set; }
}

现在我可以像这样解析我的应用程序(.Dump()来自 LinqPad)

var result = parser.ParseArguments<OptionsMutuallyExclusive>(args);
result.WithParsed(options => options.Dump()).WithNotParsed(errs => errs.Dump());

WithParsed并且会使用以下参数得到一个肯定的结果 ( ):

--enablejavascript --documentroot ~/var/local/website -r http://localhost
--ftpdirectory ~/var/local/ftpsite --anonymouslogin -r ftp://myftp.server

并且会得到一个错误(WithNotParsed):

--enablejavascript --anonymouslogin

但是:有什么办法可以知道使用了哪一套?

那么获得web第一次调用的价值ftp和第二次调用的价值?或者通过使用接口和/或派生类获得类型化的结果,比如WebOptionsand FtpOptions

使用不同的类,我可以ParseArguments多次调用,直到它成功,但这并不是很好。

我能找到的所有示例总是试图通过测试哪些值已定义而哪些未定义来确定当前集。

有什么我想念的吗?

有什么选择吗?

4

0 回答 0