4

使用Command Line Parser Library並且具有默認值的列表或數組,默認值打印爲(默認值:System.String [])。有什麼辦法讓它顯示實際的默認值?使用命令行解析器庫的列表/陣列的默認值

因此,與

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

的幫助文本打印爲"(Default: System.String[]) ..."。我想說它"(Default: { "eng" })"

+0

解析按預期發生?幫助問題是否正確?如果是的話,這可能是一個問題。但我會調查更多。 – jay 2013-03-04 19:55:27

+0

正確。解析是成功的,但列出該值的幫助文本不是很有幫助。通過代碼判斷ToString是在'HelpText :: AddOption'內的值上調用的,它調用'StringExtensions:FormatLocal'。 – PHeiberg 2013-03-04 19:59:16

+0

@jay - 爲了解決這個問題,我想在'AddOption'方法中必須有一個檢查,它將幫助文本格式化爲列表,如果它是基本類型的IEnumerable實例的話。 – PHeiberg 2013-03-04 20:05:37

回答

2

HelpText遭受了對DefaultValue使用通用格式功能的困擾。

的問題是702 HelpText.cs的線(裁判最新的穩定。):

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

當前的開發分支(以我看來可用)與new helper private method(也包括從測試的角度)解決它:

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 

有關其穩定性的信息以及第一次發佈後如何更改,請參閱here

有了這個指示,應該也很容易也能修補一個當前穩定的分叉。

+1

我想補充說,這個修復程序在** 2.0.x版**中丟失了(因爲各種各樣的原因,這裏沒有人感興趣),它實際上** ** ** **修正了** 2.0.223-beta **(非常穩定也可以在[NuGet]上使用(https://goo.gl/P2QNzP)。在[GitHub](https://goo.gl/KgsVAi)和** 2.0.x **更新的文檔中總是有最新的源代碼[https://github.com/gsscoder/commandline/]維基/最新-版)。 – gsscoder 2015-08-03 15:52:12

+0

這個單元測試演示**修復**:https://github.com/gsscoder/commandline/blob/master/tests/CommandLine.Tests/Unit/Text/HelpTextTests.cs#L434。 – gsscoder 2015-08-03 15:54:53