2012-05-30 11 views
6

Korzystam z NDesk.Options do analizowania argumentów linii poleceń dla programu wiersza poleceń C#. Działa dobrze, z wyjątkiem tego, że chcę, aby mój program kończył się bez powodzenia, i wyświetlać wynik pomocy, jeśli użytkownik zawiera argumenty, których się nie spodziewałem.NDesk.Options - wykryj niepoprawne argumenty

ja analizowania opcji wygląda następująco:

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; 

Z tego kodu, jeśli mogę użyć argumentu nieprawidłowo, takie jak określenie --filter bez =myfilter po czym NDesk.Options wygeneruje OptionException i wszystko będzie w porządku. Jednak oczekiwałem również, że wyjątek OptionException zostanie zgłoszony, jeśli przekażę argument, który nie pasuje do mojej listy, na przykład --someOtherArg. Ale tak się nie dzieje. Parser po prostu ignoruje to i kontynuuje transport.

Czy istnieje sposób wykrywania nieoczekiwanych argumentów z NDesk.Options?

Odpowiedz

10

Metoda OptionSet.Parse zwraca nierozpoznane opcje w postaci List<string>. Możesz użyć tego do zgłoszenia nieznanych opcji.

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

To kluczowy element, którego mi brakowało. Dzięki! – RationalGeek

Powiązane problemy