ConfigurationManager.AppSettings [«blah»] lancera-t-il une exception si «blah» n'existe pas?


124

ConfigurationManager.AppSettings ["blah"] lancera-t-il une exception si "blah" n'existe pas dans le web / app.config?

Excuses sincères pour la question super paresseuse.


5
-1: Puisque vous avez déjà réalisé que c'est une question paresseuse, ne serait-il pas en fait moins de travailler que de poster cette question ici?
Lasse V.Karlsen

Ou en regardant la documentation de la NameValueCollection.Itempropriété ...
Tim Robinson

2
Merci à ceux qui ont répondu. Je vais essayer de ne pas prendre l'habitude de questions comme celles-ci.
Ben Aston

49
Pfh. Veuillez continuer à poser des questions comme celle-ci, car moi et le reste du monde, la clé inexistante des paramètres d'applications du gestionnaire de configuration google, car c'est plus facile que d'analyser MSDN. Tout ce qui rend la vie un peu plus facile IMO. Vote positif parce que F ces Dbags.
Cory Mawhorter

31
Regardez votre question paresseuse en économisant aux autres quelques minutes de temps 4 ans et plus. :)
Matt Beckman

Réponses:




7

Non, il revient null.

AppSettings est un NameValueCollection - conformément à la mise en garde sur la page NameValueCollection.Get :

Cette méthode renvoie une référence null (Nothing en Visual Basic) dans les cas suivants: 1) si la clé spécifiée est introuvable; et 2) si la clé spécifiée est trouvée et que sa valeur associée est une référence nulle (Nothing en Visual Basic). Cette méthode ne distingue pas les deux cas.


6

Non, il revient null.

ConfigurationManager.AppSettingsest un NameValueCollection- de la documentation MSDN :

La méthode Get ne fait pas la distinction entre null qui est retourné car la clé spécifiée est introuvable et null qui est retourné car la valeur associée à la clé est null.

(mon emphase)


3

D'autres réponses font référence à la documentation de la propriété Item. Il n'est peut-être pas immédiatement évident de savoir pourquoi ils sont pertinents en regardant l'extrait de code suivant.

ConfigurationManager.AppSettings["blah"]

La syntaxe entre crochets est utilisée en C # pour accéder aux indexeurs. Ce sont des propriétés spéciales qui permettent à une classe d'être indexée de la même manière qu'un tableau peut l'être. En regardant la définition de la propriété NameValueCollection.Item , vous remarquerez qu'elle n'utilise pas la syntaxe de propriété normale. Le mot clé this et les paramètres de l'indexeur sont utilisés pour définir cette propriété en tant qu'indexeur.

public string this[
    string name
] { get; set; }

Dans la documentation, les indexeurs sont nommés implicitement Item et les paramètres sont entourés de crochets.

Indexeurs comme indiqué dans la documentation MSDN.

Je ne vois pas pourquoi il y avait des réponses qui faisaient référence à la méthode Get - peut-être que l'un appelle l'autre?

En tout cas, pour répondre à la question ...

Non. Une exception ne sera pas levée si vous accédez à une clé inexistante - un null sera renvoyé.

Voici la section pertinente de la documentation de la propriété NameValueCollection.Item .

Cette propriété renvoie null dans les cas suivants: 1) si la clé spécifiée n'est pas trouvée; et 2) si la clé spécifiée est trouvée et que sa valeur associée est nulle. Cette propriété ne distingue pas les deux cas.


-2

Oui http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

Edit: c'est clairement faux. À gauche pour les commentaires utiles ci-dessous.


1
la réponse à votre question est non comme @Tim mentionné. La page pointée indique simplement que si les paramètres d'applications ne peuvent pas être chargés, une exception est levée. Mais si une valeur n'est tout simplement pas présente dans les paramètres de l'application, vous n'obtiendrez pas d'exception. Cela n'aurait vraiment pas de sens de lancer une erreur simplement parce qu'une valeur n'existe pas dans un dictionnaire. Mais si le dictionnaire n'existait pas, ce serait une raison de générer une erreur. (Le terme dictionnaire a juste été utilisé pour désigner une collection arbitraire.)
spinon

Ce lien indique qu'une exception est levée si le NameValueCollectionn'a pas pu être trouvé - c'est-à-dire que le système n'a pas trouvé de paramètres. Les collections de valeur de nom ne lèvent pas d'exception lorsque vous essayez de récupérer une valeur unique qui n'existe pas.
Dexter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.