图书馆
的使用摘录
http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx
第三种常见方法是从命令行参数形成强类型命令。这在命令行如下所示的情况下很常见:
some-exe COMMAND parameters-to-the-command
在这种情况下解析更多一些:
将预期的命令与命令行参数一起传递给CommandLineParser.ParseCommand - 该方法将返回一个强类型的Command实例,该实例可以是Execute() - d。
//示例#3://用于解析以下命令行的示例: // Test.exe运行/ runId = 10 /详细 //在这种特殊情况下,我们在命令行(“run”)上有一个实际的命令,我们希望它有效地反序列化和执行。
public class RunCommand : Command
{
bool? Verbose { get; set; }
int? RunId { get; set; }
public override void Execute()
{
// Implement your "run" execution logic here.
}
}
Command c = new RunCommand();
CommandLineParser.ParseArguments(c, args);
c.Execute();
============================
如果我们在解析参数之前实例化特定的类,我不会得到,命令行参数“run”的重点是什么,这是第一个。我认为这个想法是基于命令行参数实例化和执行命令/类(“run”参数变为实例RunCommand类,“walk”变为WalkCommand类,依此类推)。可以用最新版本完成吗?此外,我从codeplex下载的内容不能按上述方式工作,并且不接受没有斜杠的第一个参数。因此,如果使用反射,我必须将命令名作为常规参数传递,然后执行多步 - 确定类名,通过反射实例化,然后通过ParseArguments解析其他参数。
答案 0 :(得分:0)
MicMit, 我博客上的例子实际上是有缺陷的。我已经纠正过了。
从本质上讲,你所做的是: 1.解析第一个参数(命令名称)以确定需要实例化的命令 2.实例化目标命令,然后将其余的参数列表传递给它。 3.执行命令
即。在您的Main中,您将执行以下操作...
if (String.Compare(args[0], "run", StringComparison.InvariantCultureIgnoreCase) == 0)
{
Command c = new RunCommand();
c.ParseArguments(args.Skip(1)); // or CommandLineParser.ParseArguments(c, args.Skip(1))
c.Execute();
}
希望有所帮助。