c# - 解析命令行参数并执行方法
问题描述
我有一个控制台应用程序,将几十个参数作为输入。我正在使用 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完全符合您的要求!
它允许您直接从命令行调用方法,传递任意数量的输入参数。
它支持原始和复杂类型作为参数;还支持IEnumerable、List和数组等集合。
它允许您通过摆脱所有“命令行标志”和调度代码来大幅减少处理命令行参数所需的代码量。
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 包
推荐阅读
- javascript - 删除“短语”最后一个实例之前或之后的字符
- vb.net - 读取最后 2 行文本文件 VB.Net Win Forms
- c# - 结合 .Contains 和 .Like
- mysql - Yocto 项目:如何将 MYSQL 添加到我的 Linux 操作系统映像中?
- javascript - 如何将数组推入数组?
- python - Beautifulsoup 只返回 100 个元素
- java - 如何等待页面加载 selenium java
- html - 当我将鼠标悬停在 div 上时,如何使链接和文本出现?
- python - 为什么 cv2.imwrite 方法为 mnist 测试图像数据集写一个黑色方块?
- sql - Oracle SQL:使用 count() 和 group by() 将两个查询连接到一个结果集中