我通过命令行使用的几乎所有 .exe 都有一个由“--help”命令调用的帮助函数。
如何在 C# 中实现这一点?是否像检查 args[] 中的参数是否为字符串“--help”一样简单?
我通过命令行使用的几乎所有 .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] 中。
我在一小部分帮助命令上使用了交集。如果我严格限制自己的问题;它最终看起来像这样:
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();
}
这主要使事情变得非常方便,并允许在 和 之间进行良好的ShowHelp
分离ParseArgs
。
if (!ParseArgs(argv, out parameters))
{
ShowHelp();
return;
}
笔记
ParseArgs
一种Main
变ParseArgs
体,不如将方法作为静态方法放入参数结构中。catch
应该只捕获解析异常;代码没有反映这一点。是的。AFAIK,与压缩参数并在屏幕上显示一些字符串相同。
static void Main( string[] args )
{
if( args != null && args.Length == 1 )
{
if( args[0].ToLower() == "help" )
{
ShowHelpHere();
}
}
}
是否像检查 args[] 中的参数是否为字符串“--help”一样简单?
是的。
这就是为什么不同的控制台程序有时对如何获取帮助信息有不同的约定。
您可以使用 CommandLineParser 块包。然后您可以创建一个 Options 类,为所有元数据提供帮助和验证。非常惊人且易于实现。