使用命令行解析器库的列表/数组的默认值
本文关键字:列表 数组 默认值 命令行 | 更新日期: 2023-09-27 18:02:04
使用命令行解析器库并具有默认值的列表或数组,默认值打印为(default: System.String[])。有没有办法让它显示实际的默认值?
所以用
[OptionList('l', "languages", Separator = ',', DefaultValue = new []{"eng"})]
public IList<string> Languages { get; set; }
帮助文本打印为"(Default: System.String[]) ..."
。我想写"(Default: { "eng" })"
HelpText对DefaultValue使用了通用格式化函数。
问题出现在HelpText.cs:
的第702行。if (option.HasDefaultValue)
{
option.HelpText = "(Default: {0}) ".FormatLocal(option.DefaultValue) + option.HelpText;
}
当前的开发分支(在我看来是可用的)用一个新的helper私有方法解决了这个问题(也从测试的角度进行了讨论):
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
有关其稳定性以及首次发布后可能发生的变化的信息,请参阅此处。
有了这个指令应该也很容易补丁当前稳定的一个分支。