在 C# 中处理命令行选项的最佳方法 [重复]
Posted
技术标签:
【中文标题】在 C# 中处理命令行选项的最佳方法 [重复]【英文标题】:Best way to handle command line options in C# [duplicate] 【发布时间】:2013-04-30 11:53:49 【问题描述】:我非常熟悉命令行参数以及如何使用它们,但我以前从未处理过选项(或标志)。我指的是以下内容:
$ sort -f -s -u letters.txt
在上面的 bash 脚本示例中,我们有 3 个选项或标志,后跟常规参数。我想在 C# 应用程序中做类似的事情。处理命令行选项的最佳方法是什么,其中参数可以以下列形式给出?
$ prog [-options] [args...]
【问题讨论】:
如果您想拥有 shell 脚本在命令行参数中可以具有的完整级别的复杂性,您可能希望获得一个能够为您解析命令行参数的库。语言中没有内置解析器;您需要从第三方工具之一中进行选择。 【参考方案1】:我建议使用诸如Command Line Parser 之类的库来处理此问题。它支持开箱即用的可选参数verb commands,例如您的示例。
【讨论】:
我同意这一点。我过去曾使用过它。它非常强大且易于使用(他们提供的示例代码确实是您入门所需的全部)。自从我第一次使用它以来,他们甚至添加了NuGet
包,这是另一个优点。【参考方案2】:
我建议您尝试使用NDesk.Options;,它是“C# 的基于回调的程序选项解析器”。
OptionSet 目前支持:
Boolean options of the form: -flag, --flag, and /flag. Boolean parameters can have a `+' or `-' appended to explicitly enable or disable the flag (in the same fashion as mcs -debug+). For boolean callbacks, the provided value is non-null for enabled, and null for disabled.
Value options with a required value (append `=' to the option name) or an optional value (append `:' to the option name). The option value can either be in the current option (--opt=value) or in the following parameter (--opt value). The actual value is provided as the parameter to the callback delegate, unless it's (1) optional and (2) missing, in which case null is passed.
Bundled parameters which must start with a single `-' and consists of a sequence of (optional) boolean options followed by an (optional) value-using option followed by the options's vlaue. In this manner,
-abc would be a shorthand for -a -b -c, and -cvffile would be shorthand for -c -v -f=file (in the same manner as tar(1)).
Option processing is disabled when -- is encountered.
这是来自docs 的示例:
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;
【讨论】:
【参考方案3】:我使用my own。这很简单,并且可以完成工作(对我而言)。
【讨论】:
以上是关于在 C# 中处理命令行选项的最佳方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章