簡體   English   中英

將“--help”參數添加到C#控制台應用程序

[英]Adding “--help” parameter to C# console application

我通過命令行使用的幾乎所有.exe都有一個幫助函數,可以通過“--help”命令調用。

我如何在C#中實現這一點? 是否像檢查args []中的參數是否為字符串“--help”一樣簡單?

使用* nix命令,通常可以通過-h--help獲得幫助。 許多Windows命令將提供/? 所以做一些像這樣的事情是不錯的做法:

public static void Main(string[] args)
{
    if (args.Length == 1 && HelpRequired(args[0]))
    {
        DisplayHelp();
    }
    else
    {
        ...
    }
}

private static bool HelpRequired(string param)
{
    return param == "-h" || param == "--help" || param == "/?";
}

用於處理跨多種文化的命令行的AC#片段是......

        string[] args = Environment.GetCommandLineArgs();
        if (args.Length == 2)
        {
            if (args[1].ToLower(CultureInfo.InvariantCulture).IndexOf("help", System.StringComparison.Ordinal) >= 0)
            {
                // give help
            }
        }

檢測邏輯可以與“?”組合 要么 ”/?” 或涵蓋所有預期案件的任何其他組合。

注意:從環境中獲取參數時,加載器會填充arg [0]。 第一個'用戶'參數在arg [1]中。

是否像檢查args []中的參數是否為字符串“--help”一樣簡單?

是。

這就是為什么不同的控制台程序有時會對如何獲取幫助信息有不同的約定。

是。 AFAIK,與編寫參數並在屏幕上顯示一些字符串相同。

static void Main( string[] args )
{
    if(  args != null && args.Length == 1 )
    {
        if( args[0].ToLower() == "help" )
        {
             ShowHelpHere();
        }
    }

}

我在一小組幫助命令上使用交集。 如果我嚴格限制自己的問題; 它看起來像這樣:

static bool ShowHelpRequired(IEnumerable<string> args)
{
    return args.Select(s => s.ToLowerInvariant())
        .Intersect(new[] { "help", "/?", "--help", "-help", "-h" }).Any();
}

擴大范圍(只是一點點); 我風與一種稱為ParseArgs返回一個boolean是true,如果無論是 分析失敗需要幫助 此方法還有一個out參數,用於存儲已解析的程序參數。

    /// <summary>
    /// Parses the arguments; sets the params struct.
    /// </summary>
    /// <param name="argv">The argv.</param>
    /// <param name="paramStruct">The parameter structure.</param>
    /// <returns>true if <see cref="ShowHelp"/> needed.</returns>
    static bool ParseArgs(IEnumerable<string> argv, out ParamStruct paramStruct)
    {
        paramStruct = new ParamStruct();

        try { /* TODO: parse the arguments and set struct fields */ }
        catch { return false; }

        return argv.Select(s => s.ToLowerInvariant()).Intersect(new[] { "help", "/?", "--help", "-help", "-h" }).Any();
    }

這使得主要內容非常方便,並允許ShowHelpParseArgs之間的良好分離。

    if (!ParseArgs(argv, out parameters))
    {
        ShowHelp();

        return;
    }

筆記

  • 而不是在Main中使用ParseArgs ,而是將ParseArgs方法作為靜態方法放入參數struct中。
  • catch應該捕獲解析異常; 代碼不反映這一點。

您可以使用CommandLineParser塊包。 然后,您可以創建一個Options類,所有元數據都可以提供幫助和驗證。 實現相當驚人和簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM