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