使用CommandLineParser库的最新版本,我有很多选择。我的目标是使用此命令行应用程序编辑XML文件,尽管这样有望扩展。
public class MyOptions
{
[Option('h', "sayhello")]
public string HelloMessage { get; set; }
[Option('v', "versioninfo")]
public string VersionInfo { get; set; }
[Option('c', "changenode")]
public string[] ChangeNode { get; set; }
[Option('g', "getnode")]
public string[] GetNode { get; set; }
}
当我在Visual Studio中调试应用程序并通过Project Properties -> Debug -> Command line arguments
向其传递以下参数/值时:
--sayhello hello
应用程序引发InvalidOperationException,表示该序列不包含任何元素。如果我注释掉string[]
类型的两个选项(ChangeNode和GetNode)或将它们更改为IEnumerable<string>
,则程序运行不会出现问题,请输入以下代码:
if (!string.IsNullOrEmpty(options.HelloMessage))
Console.WriteLine($"The message is: {options.HelloMessage}");
打印:
消息是:你好
将类型string[]
的选项更改为List<string>
或将这些选项设置为Required = false
仍会引发相同的异常。我对将IEnumerable强制转换为另一个用于处理这些选项的逻辑没有任何疑虑,但是我不确定这是否是正确的做法。如何在CommandLineParser中使用数组/集合来避免这种情况?该文档非常基础,并且在一些“快速入门”示例之外没有详细介绍该库的工作方式。
答案 0 :(得分:0)
如果我为该选项定义默认值,它将对我有用:
[Option(HelpText = "Optionally specify all processes to document separated by a comma ','.", Separator = ',', Default = new string[0])]
public string[] ProcessesToDocument { get; set; } = new string[0];
答案 1 :(得分:0)
我遇到了同样的问题,并且可以这样解决:
private string[] _parametersArray = new string[0];
[Option("parameters")]
public IEnumerable<string> Parameters
{
get { return _parametersArray; }
set { _parametersArray = value.ToArray(); }
}
public string[] ParametersArray
{
get { return _parametersArray; }
}