2012-05-30 77 views
6

我正在使用NDesk.Options來解析C#命令行程序的命令行參數。它工作正常,但我希望我的程序退出失敗,並顯示幫助輸出,如果用戶包含我沒有想到的參數。NDesk.Options - 檢測無效參數

我正是如此解析選項:

var options = new OptionSet { 
    { "r|reset", "do a reset", r => _reset = r != null }, 
    { "f|filter=", "add a filter", f => _filter = f }, 
    { "h|?|help", "show this message and exit", v => _showHelp = v != null }, 
}; 

try 
{ 
    options.Parse(args); 
} 
catch (OptionException) 
{ 
    _showHelp = true; 
    return false; 
} 
return true; 

有了這個代碼,如果我使用不當的參數,如指定--filter沒有=myfilter後,再NDesk.Options將拋出OptionException,一切都會好起來的。但是,如果我傳入的參數與我的列表不匹配,例如--someOtherArg,我也希望拋出一個OptionException異常。但是這並沒有發生。解析器只是忽略它並繼續進行卡車運輸。

有沒有辦法使用NDesk.Options檢測意外的參數?

回答

10

OptionSet.Parse方法返回List<string>中無法識別的選項。您可以使用它來報告未知選項。

try 
{ 
    var unrecognized = options.Parse(args); 
    if (unrecognized.Any()) 
    { 
     foreach (var item in unrecognized) 
      Console.WriteLine("unrecognized option: {0}", item); 
     _showHelp = true; 
     return false; 
    } 
} 
catch (OptionException) 
{ 
    _showHelp = true; 
    return false; 
} 
return true; 
+0

這是我失蹤的關鍵。謝謝! – RationalGeek