使用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
和第二次调用的价值?或者通过使用接口和/或派生类获得类型化的结果,比如WebOptions
and FtpOptions
?
使用不同的类,我可以ParseArguments
多次调用,直到它成功,但这并不是很好。
我能找到的所有示例总是试图通过测试哪些值已定义而哪些未定义来确定当前集。
有什么我想念的吗?
有什么选择吗?