2012-05-30 28 views
6

C# komut satırı programı için komut satırı bağımsız değişkenlerini ayrıştırmak için NDesk.Options kullanıyorum. İyi çalışıyor, programımın başarısız olarak çıkmasını istemiyorum ve kullanıcı beklemediğim argümanları içeriyorsa yardım çıktısını göster.NDesk.Options - geçersiz bağımsız değişkenleri algıla

Ben thusly seçenekleri ayrıştırma ediyorum: Bu kod ile

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; 

, ben yanlış bir tartışma kullanırsanız, bu tür daha sonra NDesk.Options bir OptionException atacağım ve her şey iyi olacak sonra =myfilter olmadan --filter belirterek olarak. Bununla birlikte, --someOtherArg gibi listemizle eşleşmeyen bir argümandan geçersem, atılacak bir OptionException bekledim. Ama bu gerçekleşmez. Çözümleyici bunu görmezden gelir ve kamyona devam eder.

NDesk.Options ile beklenmedik hata algılamanın bir yolu var mı?

cevap

10

OptionSet.Parse yöntemi, List<string> adresindeki tanınmayan seçenekleri döndürür. Bilinmeyen seçenekleri bildirmek için bunu kullanabilirsiniz.

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

Eksik olduğum anahtar parça budur. Teşekkürler! – RationalGeek

İlgili konular