6

NDesk.Optionsを使用して、C#コマンドラインプログラムのコマンドライン引数を解析しています。プログラムを正常に終了せず、ユーザーが予期しない引数を含めた場合にヘルプ出力を表示することを除いて、正常に機能しています。

このようにオプションを解析しています:

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をスローし、すべてが正常になります。ただし、リストと一致しない引数(。など)を渡すと、OptionExceptionがスローされることも予想していました--someOtherArg。しかし、これは起こりません。パーサーはそれを無視し、トラックを続けます。

NDesk.Optionsを使用して予期しない引数を検出する方法はありますか?

4

1 に答える 1

11

この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;
于 2012-05-30T13:03:30.763 に答える