2012-05-30 2 views
6

NDesk.Optionsを使用して、C#コマンドラインプログラムのコマンドライン引数を解析しています。私のプログラムがうまく終了しないようにすることを除いて、うまく動作しています。ユーザが私が期待していない議論が含まれている場合は、ヘルプ出力を表示してください。NDesk.Options - 無効な引数を検出

私は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; 

を、私は、このようなNDesk.OptionsがOptionExceptionがスローされますし、すべてがうまくなり、それの後に=myfilterなし--filterを指定するなど、不適切な引数を使用している場合。しかし、私はまた、--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