最佳的C#命令行参数解析方法是什么?[已关闭]

26 浏览
0 Comments

最佳的C#命令行参数解析方法是什么?[已关闭]

目前来看,这个问题不适合我们的问答格式。我们希望答案由事实、参考或专业知识支持,但这个问题很可能引发辩论、争论、投票或延长的讨论。如果你认为这个问题可以改进并可能重新开放,请访问帮助中心获取指导。

已锁定。这个问题及其答案由于不适合话题但具有历史意义而被锁定。它目前不接受新的回答和互动。

在构建需要参数的控制台应用程序时,你可以使用传递给Main(string[] args)的参数。

过去我只是对这个数组进行了索引/循环,并使用了一些正则表达式来提取值。然而,当命令变得更加复杂时,解析可能会变得非常丑陋。

因此,我对以下内容感兴趣:

  • 你使用的库
  • 你使用的模式

假设命令始终遵守像这里所回答的常见标准。

admin 更改状态以发布 2023年5月23日
0
0 Comments

我真的很喜欢命令行解析器库(http://commandline.codeplex.com/)。它有一种非常简单而优雅的通过属性设置参数的方式:

class Options
{
    [Option("i", "input", Required = true, HelpText = "Input file to read.")]
    public string InputFile { get; set; }
    [Option(null, "length", HelpText = "The maximum number of bytes to process.")]
    public int MaximumLenght { get; set; }
    [Option("v", null, HelpText = "Print details during execution.")]
    public bool Verbose { get; set; }
    [HelpOption(HelpText = "Display this help screen.")]
    public string GetUsage()
    {
        var usage = new StringBuilder();
        usage.AppendLine("Quickstart Application 1.0");
        usage.AppendLine("Read user manual for usage instructions...");
        return usage.ToString();
    }
}

0
0 Comments

我强烈建议使用NDesk.Options文档)或者Mono.Options(相同的API,不同的命名空间)。来自文档中的一个示例

bool show_help = false;
List names = new List ();
int repeat = 1;
var p = new OptionSet () {
    { "n|name=", "the {NAME} of someone to greet.",
       v => names.Add (v) },
    { "r|repeat=", 
       "the number of {TIMES} to repeat the greeting.\n" + 
          "this must be an integer.",
        (int v) => repeat = v },
    { "v", "increase debug message verbosity",
       v => { if (v != null) ++verbosity; } },
    { "h|help",  "show this message and exit", 
       v => show_help = v != null },
};
List extra;
try {
    extra = p.Parse (args);
}
catch (OptionException e) {
    Console.Write ("greet: ");
    Console.WriteLine (e.Message);
    Console.WriteLine ("Try `greet --help' for more information.");
    return;
}

0