2010-09-22 19 views
5

J'ai développé des applications console .net en utilisant C# et j'ai toujours dicté les paramètres d'ordre à insérer pour que args [0] soit toujours date de début et args [1] soit toujours date de fin, par exemple.Existe-t-il .net magic pour obtenir les valeurs des paramètres par nom dans l'application console?

Cependant, je voudrais passer à l'utilisation de paramètres nommés afin que toute combinaison de paramètres puisse être envoyée dans n'importe quel ordre, comme le "-sd" typique préfixerait une date de début.

Je sais que je pourrais analyser à travers les args [] à la recherche de "-", puis lire le nom et regarder la position suivante pour la valeur d'accompagnement, mais avant de le faire pour voir s'il y avait une manipulation quelconque pour cette pratique plutôt standard.

est là quelque chose comme ça là-bas déjà qui pourrait faire en tant que tel:

DateTime startDate = (DateTime)((ConsoleParameters)args[])["sd"] 

J'utilise C# et .Net 4

+0

Quelle version .NET utilisez-vous ici? –

+0

cette fonctionnalité existe-t-elle dans n'importe quelle version de .net? J'utilise 4 – kscott

+4

Cette magie n'existe qu'au plus profond de la Terre du milieu. – jlafay

Répondre

5

Il n'y a rien inscrit dans le cadre de base.

Beaucoup de gens pensent que NDesk.Options est utile pour ce genre de chose. Consultez cet exemple (pris directement à partir du lien fourni):

string data = null; 
bool help = false; 
int verbose = 0; 

var p = new OptionSet() { 
    { "file=",  v => data = v }, 
    { "v|verbose", v => { ++verbose } }, 
    { "h|?|help", v => help = v != null }, 
}; 
List<string> extra = p.Parse (args); 
+0

NDesk.Options semble être juste le genre de chose que je cherchais au lieu d'une méthode intégrée dans .net. Merci. – kscott

3

Oui, la «magie» est que c'est un problème commun et il a été résolu de manière adéquate. Je recommande donc d'utiliser une bibliothèque déjà écrite pour gérer les arguments de la ligne de commande.

CommandLineParser a été génial pour moi. Il est assez documenté et assez flexible pour chaque type d'argument de ligne de commande que j'ai voulu gérer. De plus, il aide à la documentation d'utilisation. Je dirai que je ne suis pas le plus grand fan de faire une classe spécifique qui doit être décorée avec des attributs pour utiliser cette bibliothèque, mais c'est un point mineur considérant qu'il résout mon problème. Et en réalité forçant cette classe attribuée me pousse à garder cette classe séparée de l'endroit où mon application récupère effectivement ses paramètres et qui semble toujours être un meilleur design.

0

Il n'existe pas de paramètres nommés. "-sd" est juste un choix pour une application spécifique. Il peut également être "/sd". Ou "sd=". Ou ce que vous voulez.

Comme il n'y a pas de paramètres nommés, il n'y a rien dans .NET Framework qui vous permette d'utiliser la syntaxe "-sd".

Mais vous pouvez très facilement créer votre propre méthode pour obtenir un ensemble de "paramètres nommés" pour votre application.

Modifier: ou, encore mieux, vous pouvez utiliser une bibliothèque existante, comme suggéré dans d'autres réponses.

Edit: lire la réponse par @Sander Rijken, je vois que je me suis trompé: il y avait encore une implémentation de "-sd" syntaxe dans .NET 4.0 avant la sortie. Mais depuis qu'il a été abandonné avant la version finale, les seuls moyens sont toujours de créer votre propre méthode ou d'utiliser une bibliothèque existante.