在我的控制臺應用程式中,當沒有提供控制臺引數時,將執行我指定的串列(在本例中為引數 3)的任何處理程式。使用設定為 false 的布爾引數呼叫處理程式。但對我來說,根本不呼叫它更有意義。
如何防止這種情況發生,而是向我顯示幫助文本?
using System;
using System.CommandLine;
namespace GlideRush.LeaderboardsConsole // Note: actual namespace depends on the project name.
{
internal class Program
{
static async Task<int> Main(string[] args)
{
var test1 = new Option<bool>(
name: "test1",
description: "test param 1");
var test2 = new Option<bool>(
name: "test2",
description: "test param 2");
var test3 = new Option<bool>(
name: "test3",
description: "test param 3");
var rootCommand = new RootCommand("Testing console params");
rootCommand.AddOption(test1);
rootCommand.AddOption(test2);
rootCommand.AddOption(test3);
rootCommand.SetHandler(boolparam => Console.WriteLine($"Param 1 {boolparam}"), test1);
rootCommand.SetHandler(boolparam => Console.WriteLine($"Param 2 {boolparam}"), test2);
rootCommand.SetHandler(boolparam => Console.WriteLine($"Param 3 {boolparam}"), test3);
return await rootCommand.InvokeAsync(args);
}
}
}
當我不提供任何引數時,它會輸出:
$ dotnet run
Param 3 False
我希望它輸出默認值:
Description:
Testing console params
Usage:
GlideRushConsole [options]
Options:
test1 test param 1
test2 test param 2
test3 test param 3
--version Show version information
-?, -h, --help Show help and usage information
讓處理程式的順序決定默認行為是不對的,我也不想在每個引數處理程式上檢查布林值是否為假。無論如何,它仍然沒有給我默認的幫助選單。
uj5u.com熱心網友回復:
正如Panagiotis Kanavos已經說過的,一個命令只能有一個處理程式。
如果您想要基于引數的不同處理程式,您可能正在尋找子命令或動詞。
例如(手繪代碼)
var smoothOrNot = new Option<bool>(
name: "smooth",
description: "smooth gliding or nah?");
var fastOrNot = new Option<bool>(
name: "fast",
description: "fast gliding or prefer slow");
var glideRushCommand = new RootCommand();
var glideVerb = new Command("glide", "glide subcommand");
var rushVerb = new Command("rush", "rush subcommand");
glideVerb.Add(glideOptionOne);
glideVerb.Add(glideOptionTwo);
glideRushCommand.Add(glideVerb);
uj5u.com熱心網友回復:
一個命令一次只能有一個處理程式。呼叫SetHandler3 次替換了以前的處理程式,因此只使用最后一個。
要處理 3 個引數,請使用具有三個引數的操作:
rootCommand.SetHandler((b1,b2,b2)=>{
Console.WriteLine($"Param 1 {b1}");
Console.WriteLine($"Param 2 {b2}");
Console.WriteLine($"Param 3 {b3}");
}, test1, test2, test3);
更好的是,使用單獨的方法:
rootCommand.SetHandler(DoSomething, test1, test2, test3);
...
void DoSomething(bool? b1,bool? b2, bool? b3)
{
Console.WriteLine($"Param 1 {b1}");
Console.WriteLine($"Param 2 {b2}");
Console.WriteLine($"Param 3 {b3}");
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517309.html
標籤:C#控制台应用程序system.commandline
上一篇:覆寫文本檔案的第一行(c#)
