将“--help”参数添加到C#控制台应用程序

时间:2013-10-22 21:25:45

标签: c# .net command-line console environment

我通过命令行使用的几乎所有.exe都有一个帮助函数,可以通过“--help”命令调用。

如何在C#中实现这一点?是否像检查args []中的参数是否为字符串“--help”??

一样简单

6 个答案:

答案 0 :(得分:18)

使用* 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 == "/?";
}

答案 1 :(得分:7)

用于跨多种文化处理命令行的C#代码段是......

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

检测逻辑可以与“?”结合使用要么 ”/?”或涵盖所有预期案件的任何其他组合。

注意:从环境中获取参数时,加载器会填充arg [0]。第一个'user'参数在arg [1]中。

答案 2 :(得分:0)

  

是否像检查args []中的参数是否为字符串“--help”??

一样简单

是。

这就是为什么不同的控制台程序有时会对如何获取帮助信息有不同的约定。

答案 3 :(得分:0)

是。 AFAIK,与在屏幕上显示参数和显示一些字符串相同。

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

}

答案 4 :(得分:0)

我在一小组帮助命令上使用交集。如果我严格限制自己的问题;它看起来像这样:

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

扩大范围(只是一点点);我最后得到了一个名为ParseArgs的方法,如果 解析失败需要帮助,则返回boolean STRONG>。此方法还有一个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;
    }

备注

  • ParseArgs方法放入参数struct作为静态方法,而不是Main ParseArgs中的catch
  • {{1}}应捕获解析异常;代码没有反映这一点。

答案 5 :(得分:0)

您可以使用CommandLineParser nugget包。然后,您可以创建一个Options类,所有元数据都可以提供帮助和验证。实现起来非常惊人且简单。