0

图书馆在

http://testapi.codeplex.com/

用法摘自

http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx

第三种常用方法是从命令行参数形成强类型命令。这在命令行如下所示的情况下很常见:

some-exe  COMMAND  parameters-to-the-command

在这种情况下,解析有点复杂:

  1. 为每个受支持的命令创建一个类,该类派生自 Command 抽象基类并实现预期的 Execute 方法。
  2. 将预期的命令与命令行参数一起传递给 CommandLineParser.ParseCommand——该方法将返回一个可以是 Execute()-d 的强类型命令实例。

    // 示例 #3: // 解析以下命令行的示例: // Test.exe run /runId=10 /verbose // 在这个特殊情况下,我们在命令行上有一个实际的命令(“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 解析其他参数。

4

1 回答 1

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();
}

希望有帮助。

于 2010-06-15T21:10:21.440 回答