7

コマンド ライン パーサー ライブラリを使用し、デフォルト値を持つリストまたは配列を使用すると、デフォルト値は (デフォルト: System.String[]) として出力されます。実際のデフォルト値を表示させる方法はありますか?

だから

[OptionList('l', "languages", Separator = ',', DefaultValue = new []{"eng"})]
public IList<string> Languages { get; set; }

ヘルプ テキストは として出力され"(Default: System.String[]) ..."ます。と言ってほしい"(Default: { "eng" })"

4

1 に答える 1

2

HelpText は、DefaultValue に対して一般化された書式設定関数を使用していました。

問題は (最新の安定版を参照) HelpText.csの 702 行目にありました。

if (option.HasDefaultValue)
{
  option.HelpText = "(Default: {0}) ".FormatLocal(option.DefaultValue) + option.HelpText;
}

現在の開発ブランチ (私の意見では使用可能) は、新しいヘルパー プライベート メソッドで解決します(テストの観点からもカバーされています)。

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

その安定性と最初のリリース後の変更点については、こちらを参照してください。

この手順を使用すると、現在の安定版のフォークにパッチを適用することも簡単になります。

于 2013-03-05T08:45:01.817 に答える