C# 解析命令行参数和执行方法

C# 解析命令行参数和执行方法,c#,.net,methods,command-line,command-line-parser,C#,.net,Methods,Command Line,Command Line Parser,我有一个控制台应用程序将几十个参数作为输入。 我正在使用commandlineparser来帮助自己,并且我在设置属性值方面没有问题 顺便说一下,我还有很多方法需要回忆。 我需要调用的方法以0到7之间的任意数量的参数作为输入;有些方法是无参数的,大多数方法至少需要3个参数作为输入 为最简单的情况(无参数方法)寻找解决方案,我提出了以下解决方案: 我引入了一个新的布尔属性,称为IsExecuteOperation,我设置了这个属性,让commandlineparser完成它的工作,然后检查值,并最

我有一个控制台应用程序将几十个参数作为输入。 我正在使用commandlineparser来帮助自己,并且我在设置属性值方面没有问题

顺便说一下,我还有很多方法需要回忆。
我需要调用的方法以0到7之间的任意数量的参数作为输入;有些方法是无参数的,大多数方法至少需要3个参数作为输入

为最简单的情况(无参数方法)寻找解决方案,我提出了以下解决方案: 我引入了一个新的布尔属性,称为IsExecuteOperation,我设置了这个属性,让commandlineparser完成它的工作,然后检查值,并最终调用方法,如下所示:

    class Program
    {
        static void Main( string[] args )
        {
            Parser.Default.ParseArguments<Options>( args )
                .WithParsed<Options>( o =>
                {
                    if( o.IsExecuteOperation )
                    {
                        o.ExecuteOperation();
                    }
                } );
        }
    
        public class Options
        {
            public bool IsExecuteOperation { get; set; }
    
            public void ExecuteOperation()
            {
                //...
            }
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
Parser.Default.ParseArguments(args)
.WithParsed(o=>
{
如果(o.IsExecuteOperation)
{
o、 执行操作();
}
} );
}
公共类选项
{
公共布尔IsExecuteOperation{get;set;}
公共作废执行操作()
{
//...
}
}
}
这看起来是个好主意,所以我采用了所有其他无参数方法。
无参数方法是7个,因此,我有更多的选项要处理,加上检查此标志和调用方法的附加代码

我继续处理以1个参数(2个方法)作为输入的方法

第一个方法使用一个数字作为输入:这将产生2个新属性(1个用于方法参数+1个用于指示是否执行该方法的属性)+检查和执行该方法本身的附加代码

第二个单参数方法出现了问题:它将一个对象作为输入,该对象在内部定义了至少9个属性,我必须设置这些属性才能正确执行该方法。

我也可以介绍这9个属性,但此时我才意识到,在技术上可能,但不实用,将相同的方法应用于我的所有方法(50ish),并引入大量属性来调用这些方法,这将是混乱的

我的问题。。我的方法正确吗? 有没有更好的策略来解决这个问题? 有没有直接调用方法的方法?

谢谢。

正是你想要的

它允许您直接从命令行调用方法传递任意多的输入参数

它支持基本类型复杂类型作为参数集合作为IEnumerable列表数组也受支持

它允许您通过去除所有“命令行标志”和分派代码,大幅减少处理命令行参数所需的代码量

public class Program
{
    static void Main( string[] args )
    {
        CommandLine.Instance.Parse<Commands>( args );
        //just call with this args: --method1 ["my string" "mysecondstring" "etc"]
    }

    public class Commands
    {
        public void Method1( List<string> strings ) {  ///...  }
        public void Method2( SomeClass myParam, List<SomeOtherClass> mySecondParam ) {  ///...  }
    }
}
公共类程序
{
静态void Main(字符串[]参数)
{
CommandLine.Instance.Parse(args);
//只需使用以下参数调用:--method1[“我的字符串”“mysecondstring”“etc”]
}
公共类命令
{
公共void方法1(列表字符串){//…}
public void Method2(SomeClass myParam,List mySecondParam){//…}
}
}
我在github上发布了一个开源项目。
看看吧,它可能会对你的下一个项目有所帮助


还有一个可用的nuget包

可以为每个方法创建一个选项类,每个选项类都带有
动词
属性,以满足您的需要吗?嗯,您能更好地解释一下这对我有什么帮助吗?thanksIt取决于所需命令行的外观。如果是“myprg方法1[args1]”、“myprg方法2[args2]”等,请使用该功能。@KlausGütter动词肯定会有帮助。太好了!干得好!