将命令行选项设置为 false
本文关键字:false 设置 选项 命令行 | 更新日期: 2023-09-27 17:56:07
我正在使用通过 NuGet 在 C# 控制台应用程序 .NET Framework 4.0 中获得的命令行分析器库。
这是我的选项课...
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
如果你看这个,你会发现
布尔值选项如果存在,则为真,如果不存在,则为假。
所以只要做
myprogram.exe
PromptForExit
应该是假的。
编辑
在您的情况下:否定您的财产
[Option('p', "noprompt", DefaultValue = false, HelpText = "Don't prompt the user before exiting the program.")]
public bool NoPromptForExit { get; set; }
显然,该库不能正确支持默认值为 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();
}
}
}
我认为这是一个更丑陋的解决方案,所以如果有人提出了更好的解决方案,那么我会接受它。
太糟糕了,布尔方法不能正常工作。我使用是否枚举作为解决方法。希望它会有所帮助。
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; }
}