2012-05-30 10 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이 throw 될 것으로 예상됩니다. 그러나 이것은 일어나지 않습니다. 파서는이를 무시하고 트럭 운전을 계속합니다.

NDesk.Options에서 예기치 않은 args를 감지하는 방법이 있습니까?

답변

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