2012-05-30 8 views
6

Ich verwende NDesk.Options, um Befehlszeilenargumente für ein C# -Kommandozeilenprogramm zu analysieren. Es funktioniert gut, außer dass ich möchte, dass mein Programm nicht erfolgreich beendet wird, und die Hilfeausgabe anzeigen, wenn der Benutzer Argumente enthält, die ich nicht erwartet habe.NDesk.Options - ungültige Argumente finden

Ich bin Parsen Optionen thusly:

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; 

Mit diesem Code, wenn ich falsch ein Argument verwenden, wie --filter ohne =myfilter Angabe, nachdem es dann NDesk.Options eine OptionException werfen und alles wird gut. Ich habe jedoch auch erwartet, dass eine OptionException ausgelöst wird, wenn ich ein Argument übergebe, das nicht mit meiner Liste übereinstimmt, z. B. --someOtherArg. Aber das passiert nicht. Der Parser ignoriert das einfach und fährt weiter.

Gibt es eine Möglichkeit, unerwartete Argumente mit NDesk.Options zu erkennen?

Antwort

10

Die Methode OptionSet.Parse gibt die nicht erkannten Optionen in einer List<string> zurück. Sie können damit unbekannte Optionen melden.

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

Das ist das Schlüsselstück, das ich vermisste. Vielen Dank! – RationalGeek

Verwandte Themen