【问题标题】:Command Line Parser Library - Boolean Parameter命令行解析器库 - 布尔参数
【发布时间】:2016-03-08 17:19:56
【问题描述】:

我尝试将布尔参数传递给控制台应用程序并使用Command Line Parser Library 处理该值。

[Option('c', "closeWindow", Required = true, HelpText = "Close the window.")]
public bool CloseWindow { get; set; }

我尝试将参数传递为

-c false
-c False
-c "false"
-...

没有区别,每次尝试我都会得到 "true" 作为值。

谁能告诉我如何传递参数来获取布尔值false

为了避免可能的询问,有一个正确传递的字符串选项:

[Option('s', "system", Required = true, HelpText = "Any help text")]
public string System { get; set; }

【问题讨论】:

  • 我会认为布尔参数存在或不存在。他们不需要和争论 - 不知道如何使用 Required = true

标签: c# nuget-package command-line-parser


【解决方案1】:

您无需添加TrueFalse。使用-c 将评估为True。不使用它将评估为False。在文档的某处,有一个带有 -v 的示例,用于详细输出。但我现在找不到。我猜 Required=true 对于布尔选项来说不是必需的。

【讨论】:

  • 你是对的,如果 -c 未通过,则通过 -c 被评估为真,我得到假。但是如果我想使用“必需”选项怎么办?
  • 我认为该库不打算以这种方式使用它,但您可以将您的选项设为字符串,然后匹配该字符串以评估您的布尔值。您可能可以在您选择的 getter 函数中执行此操作。
  • 如果默认值为'True',这个参数有什么意义?不指定它意味着'True',因为默认,指定它意味着'True',因为被指定。
  • 恕我直言,这看起来像是设计错误
  • @momo,因为它是。
【解决方案2】:

bool? 以你想要的方式行事

与:

[Option('c', "closeWindow", Required = true, HelpText = "Close the window.")]
public bool? CloseWindow { get; set; }

结果将是:

-c false // -> false
-c true  // -> true
-c       // -> error
         // -> error if Required = true, null otherwise

【讨论】:

    【解决方案3】:

    这是一个需要考虑的解决方法:

    更改选项的名称,因此 false 始终是默认值。如果您希望“关闭窗口”为默认值,则选项名称变为-w "keepWindowOpen"

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2012-07-09
      • 2018-03-03
      • 2015-01-06
      • 2012-01-26
      相关资源
      最近更新 更多