构建带有参数的控制台应用程序时,可以使用传递给Main(string[] args)的参数.

在过go ,我只是对该数组进行索引/循环,并使用一些正则表达式来提取值.然而,当命令变得更复杂时,解析可能会变得非常难看.

所以我感兴趣的是:

  • 你使用的图书馆
  • 你使用的模式

假设这些命令始终遵循通用标准,例如answered here.

推荐答案

我强烈建议使用NDesk.Options(Documentation)和/或Mono.Options(相同的API,不同的名称空间).example from the documentation:

bool show_help = false;
List<string> names = new List<string> ();
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<string> 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;
}

.net相关问答推荐

Docker失败文件找不到

StackExchange.Redis和NRedisStack包有什么不同?

PowerShell中窗体定时器和系统定时器的统一处理

DotNet COM初始化问题

避免函数和其他对象之间的相互递归的模式?

从 Contentful 中的富文本元素中获取价值?

如何使用 awslocal 通过 localstack 中的 cloudwatch events/eventbridge 触发 lambda

.NET Async / Await:状态机如何知道何时继续执行?

如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?

在.NET C#中截断整个单词的字符串

C#.Net 中的可选返回

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

SqlDateTime.MinValue != DateTime.MinValue,为什么?

Select 文件夹对话框 WPF

为什么递归调用会导致不同堆栈深度的 StackOverflow?

Linq查询分组并 Select 第一个项目

为什么 C# 多维数组不实现 IEnumerable

HashSet 是否保留插入顺序?

ValueTypes 如何从 Object (ReferenceType) 派生并且仍然是 ValueTypes?

在 IIS 中访问 .svc 文件时出现 HTTP 404