9

我在我的 C# 控制台应用程序 .NET Framework 4.0 中使用通过 NuGet 获得的命令行解析器库。

这是我的选项类...

class Options
{
    [Option('p', "prompt", DefaultValue = true, HelpText = "Prompt the user before exiting the program.")]
    public bool PromptForExit { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
    }
}

这是我解析和使用选项的地方......

static void Main(string[] args)
{
    Options options = new Options();
    if (CommandLine.Parser.Default.ParseArguments(args, options))
    {
        if (options.PromptForExit)
        {
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

我尝试了各种命令,试图让它在退出前不提示我,但它们都不起作用。有没有人熟悉这个库或者知道如何从命令行让 PromptForExit 选项为假?

这是我尝试过的。

myprogram.exe
myprogram.exe -p false
myprogram.exe -p False
myprogram.exe -p FALSE
myprogram.exe -p 0
myprogram.exe --prompt false
myprogram.exe --prompt False
myprogram.exe --prompt FALSE
myprogram.exe --prompt 0
4

3 回答 3

11

如果你看这个,你会看到那个

布尔选项如果存在则为真,如果不存在则为假。

所以就这样做

myprogram.exe

并且PromptForExit应该是错误的。

编辑

在你的情况下:否定你的财产

[Option('p', "noprompt", DefaultValue = false, HelpText = "Don't prompt the user before exiting the program.")]
public bool NoPromptForExit { get; set; }
于 2014-04-02T15:02:11.040 回答
2

显然,该库不能正确支持 DefaultValue 为 True 的布尔值。所以我修改了我的程序......

class Options
{
    [Option('p', "do-not-prompt", DefaultValue = false, HelpText = "Do not prompt the user before exiting the program.")]
    public bool DoNotPromptForExit { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
    }
}


static void Main(string[] args)
{
    Options options = new Options();
    if (CommandLine.Parser.Default.ParseArguments(args, options))
    {
        if (!options.DoNotPromptForExit)
        {
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

我认为这是一个更丑陋的解决方案,所以如果有人提出更好的解决方案,那么我会接受它。

于 2014-04-02T15:15:11.363 回答
1

太糟糕了,布尔方法不能正常工作。我使用 YesNo-enum 作为解决方法。希望它会有所帮助。

class Options
{
    public enum YesNo
    {
       Yes,
       No
    }

    [Option('p', "prompt", DefaultValue = YesNo.Yes, HelpText = "Prompt the user before exiting the program. (Yes/No)")]
    public YesNo PromptForExit { get; set; }
}
于 2016-12-16T07:59:19.217 回答