C# 使用命令行解析器库的列表/数组的默认值
使用并拥有具有默认值的列表或数组,默认值将打印为(默认值:System.String[])。有没有办法让它显示实际的默认值 所以C# 使用命令行解析器库的列表/数组的默认值,c#,command-line,command-line-arguments,command-line-parser,C#,Command Line,Command Line Arguments,Command Line Parser,使用并拥有具有默认值的列表或数组,默认值将打印为(默认值:System.String[])。有没有办法让它显示实际的默认值 所以 [OptionList('l', "languages", Separator = ',', DefaultValue = new []{"eng"})] public IList<string> Languages { get; set; } [选项列表('l',“语言”,分隔符=',',DefaultValue=new[]{“eng”}] 公共ILi
[OptionList('l', "languages", Separator = ',', DefaultValue = new []{"eng"})]
public IList<string> Languages { get; set; }
[选项列表('l',“语言”,分隔符=',',DefaultValue=new[]{“eng”}]
公共IList语言{get;set;}
帮助文本打印为
“(默认值:System.String[])…”
。我想说的是”(默认值:{“eng”})
帮助文本在对DefaultValue使用通用格式函数时遇到的麻烦
问题出现在(参考最新版本)第702行:
当前的开发分支(我认为是可用的)通过以下方法解决了它(也从测试的角度讨论):
要使用最新的开发分支:
git clone -b develop-1.9.8-beta https://github.com/gsscoder/commandline.git commandline-develop
有关其稳定性以及首次发布后如何更改的信息,请参阅
使用此指令还可以轻松修补当前稳定的分支。解析是否按预期进行?帮助问题对吗?如果是,这可能是一个问题。但我会调查更多的。对。解析成功,但列出该值的帮助文本没有多大帮助。根据代码判断,对
HelpText::AddOption
中的值进行ToString,调用StringExtensions:FormatLocal
@jay-以修复它,我想必须在AddOption
方法中进行检查,如果它是基本类型的IEnumerable
实例,则将帮助文本格式化为列表。谢谢您的提示。在github项目中打开了一个。更新也将发布在这里。仅供参考:2.0.x使用Default
而不是DefaultValue
。而且不再需要选项列表
,只需将选项
与带值的分隔符
一起使用,即可确定IEnumerable
的目标。我想补充一点,这个补丁在2.0.x版本中丢失了(出于各种原因,这里没有人对此感兴趣),实际上它在2.0.223-beta版本中被重新修复(使用起来相当稳定),也可以在上获得。与往常一样,最新的源代码在这里,2.0.x更新的文档在这里。此单元测试演示了修复程序:。
private static string FormatDefaultValue(object value)
{
if (value is bool)
{
return value.ToLocalString().ToLowerInvariant();
}
if (value is string)
{
return value.ToLocalString();
}
var asEnumerable = value as IEnumerable;
if (asEnumerable != null)
{
var builder = new StringBuilder();
foreach (var item in asEnumerable)
{
builder.Append(item.ToLocalString());
builder.Append(" ");
}
return builder.Length > 0 ? builder.ToString(0, builder.Length - 1) : string.Empty;
}
return value.ToLocalString();
}
git clone -b develop-1.9.8-beta https://github.com/gsscoder/commandline.git commandline-develop