【问题标题】:flags priority in command line arguments using NDesk.Options. C#使用 NDesk.Options 在命令行参数中标记优先级。 C#
【发布时间】:2014-09-01 21:34:15
【问题描述】:

我目前正在使用 NDesk.Options 来操作我的命令行参数。我现在遇到的问题是,当我使用多个标志运行时,计算是按照标志出现的顺序完成的。但这并不总是我想要的。例如对于这些论点

-t 20 -g 邮件组

我希望首先计算 -g 标志(它加载一个 mailGroup 数据),然后计算 -t 20 (这是某些分析的前 20 个)。这适用于“-g mailGroup -t 20”

另外,如果没有加载任何内容,我的 -t 20 将不起作用,所以基本上 -g mailGroup 是 -t 20 之前需要的选项。

有没有一种优雅的方式来为这些标志提供评估优先级?也可能处理一个标志需要在它之前计算另一个标志的子集的情况(例如,我有多种加载方式和形式,而不仅仅是-g)。

【问题讨论】:

    标签: c# command-line-arguments flags ndesk.options


    【解决方案1】:

    您是否在每个选项的操作中执行逻辑(即在您阅读每个新选项的同时)?如果是这样,解耦并在操作中简单地设置布尔/配置变量,然后在解析所有选项后执行您的逻辑。

    【讨论】:

    • 是的,我正在为每个选项执行操作。例如,该操作由一个方法调用组成,看起来很整洁。因此,您不是说,而是设置一个必须运行此函数的布尔值,并且后记处理在 options.Parse(args) 之后设置所有布尔值时的顺序?
    • 是的,我就是这样做的。我的主要变量中有一堆变量,我所有的操作都只是设置变量。完成后,我会使用基于这些变量的逻辑(if/switch 语句),您可以检查互斥性,或嵌套它们的依赖关系。
    • 太好了,听起来像是一个计划,我现在就试试吧:D。我认为 NDesk.Options 库可以处理其中一些情况,这就是为什么我不想围绕它制定自己的逻辑,因为我(很可能)在库中有更好的逻辑。
    • 这就像通过使编译器成为 2-pass 编译器来延迟编译器中的类型解析。在第 1 阶段解析,在第 2 阶段解析或执行语义操作。我仍然喜欢 NDesk.Options,因为它是处理选项的一种简洁而健壮的方式。这还可以让您处理重复或累积选项,例如 -v -v -v(如果您的操作是 => 详细 ++,则详细级别 3)
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多