解析命令行参数并执行方法
Parse commandline args and execute methods
我有一个 控制台应用程序 将数十个参数作为输入。
我正在使用 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()
{
//...
}
}
}
这看起来是个好主意,所以我采用了所有其他无参数方法。
无参数方法有 7 个,所以我有 7 个选项要处理,加上额外的代码来检查这个标志和调用方法。
我开始处理将 1 参数作为输入的方法(2 种方法)。
第一个方法将一个数字作为输入:这会产生 2 个新属性(1 个用于方法参数 + 1 个 属性 需要发出是否执行该方法的信号)+ 要检查和执行的附加代码方法本身。
第二个单参数方法出现了问题:它将一个对象作为输入,该对象在内部定义了至少 9 个属性,我绝对需要设置这些属性才能正确执行该方法。
好吧,我也可以介绍这 9 个属性,但此时我才意识到,技术上可行,但不切实际,并且对我所有的应用相同的方法很麻烦方法 (50ish) 并引入数百个属性来调用这些方法。
我的问题..我的方法正确吗?
有没有更好的策略来解决这个问题?
有没有直接调用方法的方法?
谢谢。
UltraMapper.CommandLine 做你想做的事!
它允许您直接从命令行调用方法传递任意数量的输入参数。
它支持原始和复杂类型作为参数; Collections as IEnumerable、List 和 arrays 也受支持.
通过删除所有 'commandline flags' 和调度代码,您可以大幅减少处理命令行参数所需的代码量。
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 ) { ///... }
}
}
我在 github 上将 UltraMapper.CommandLine 作为开源项目发布。
看看吧,它可能对你的下一个项目有帮助!
还有 nuget 包可用 here
我有一个 控制台应用程序 将数十个参数作为输入。 我正在使用 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()
{
//...
}
}
}
这看起来是个好主意,所以我采用了所有其他无参数方法。
无参数方法有 7 个,所以我有 7 个选项要处理,加上额外的代码来检查这个标志和调用方法。
我开始处理将 1 参数作为输入的方法(2 种方法)。
第一个方法将一个数字作为输入:这会产生 2 个新属性(1 个用于方法参数 + 1 个 属性 需要发出是否执行该方法的信号)+ 要检查和执行的附加代码方法本身。
第二个单参数方法出现了问题:它将一个对象作为输入,该对象在内部定义了至少 9 个属性,我绝对需要设置这些属性才能正确执行该方法。
好吧,我也可以介绍这 9 个属性,但此时我才意识到,技术上可行,但不切实际,并且对我所有的应用相同的方法很麻烦方法 (50ish) 并引入数百个属性来调用这些方法。
我的问题..我的方法正确吗? 有没有更好的策略来解决这个问题? 有没有直接调用方法的方法?
谢谢。
UltraMapper.CommandLine 做你想做的事!
它允许您直接从命令行调用方法传递任意数量的输入参数。
它支持原始和复杂类型作为参数; Collections as IEnumerable、List 和 arrays 也受支持.
通过删除所有 'commandline flags' 和调度代码,您可以大幅减少处理命令行参数所需的代码量。
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 ) { ///... }
}
}
我在 github 上将 UltraMapper.CommandLine 作为开源项目发布。
看看吧,它可能对你的下一个项目有帮助!
还有 nuget 包可用 here