ConfigurationManager.AppSettings ["blah"] genererà un'eccezione se "blah" non esiste?


124

ConfigurationManager.AppSettings ["blah"] genererà un'eccezione se "blah" non esiste in web / app.config?

Sincere scuse per la domanda super pigra.


5
-1: Dal momento che hai già capito che è una domanda pigra, sarebbe in realtà non solo cercando che sia meno lavoro di quanto questo distacco domanda qui?
Lasse V. Karlsen

O guardando la documentazione per la NameValueCollection.Itemproprietà ...
Tim Robinson

2
Grazie a coloro che hanno risposto. Cercherò di non prendere l'abitudine di domande come queste.
Ben Aston

49
PFH. Per favore continua a fare domande come questa perché io e il resto del mondo google configurationmanager appsettings chiave inesistente perché è più facile che analizzare MSDN. Tutto ciò che rende la vita un po 'più facile IMO. Upvoted perché F quei Dbags.
Cory Mawhorter

31
Guarda la tua domanda pigra risparmiando ad altre persone pochi minuti di tempo 4 anni e contando. :)
Matt Beckman

Risposte:




7

No, ritorna null.

AppSettings è una NameValueCollection , come da avvertenza nella pagina NameValueCollection.Get :

Questo metodo restituisce un riferimento null (Nothing in Visual Basic) nei seguenti casi: 1) se la chiave specificata non viene trovata; e 2) se la chiave specificata viene trovata e il valore associato è un riferimento null (Nothing in Visual Basic). Questo metodo non distingue tra i due casi.


6

No, ritorna null.

ConfigurationManager.AppSettingsè un NameValueCollection- dalla documentazione MSDN :

Il metodo Get non distingue tra null che viene restituito perché la chiave specificata non viene trovata e null che viene restituito perché il valore associato alla chiave è null.

(la mia enfasi)


3

Altre risposte fanno riferimento alla documentazione per la proprietà Item. Potrebbe non essere immediatamente ovvio il motivo per cui sono rilevanti guardando il seguente frammento di codice.

ConfigurationManager.AppSettings["blah"]

La sintassi delle parentesi quadre viene utilizzata in C # per accedere agli indicizzatori. Si tratta di proprietà speciali che consentono di indicizzare una classe nello stesso modo in cui lo può essere un array. Osservando la definizione della proprietà NameValueCollection.Item , noterai che non utilizza la normale sintassi della proprietà. La parola chiave this e i parametri dell'indicizzatore vengono utilizzati per definire questa proprietà come indicizzatore.

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

Nella documentazione, gli indicizzatori sono denominati implicitamente Item e i parametri sono racchiusi tra parentesi quadre.

Indicizzatori come mostrato nella documentazione MSDN.

Non mi è chiaro il motivo per cui c'erano risposte che facevano riferimento al metodo Get - forse uno chiama l'altro?

In ogni caso, per rispondere alla domanda ...

No. Non verrà generata un'eccezione se si accede a una chiave inesistente: verrà restituito un valore null.

Ecco la sezione pertinente dalla documentazione della proprietà NameValueCollection.Item .

Questa proprietà restituisce null nei seguenti casi: 1) se la chiave specificata non viene trovata; e 2) se la chiave specificata viene trovata e il valore associato è nullo. Questa proprietà non distingue tra i due casi.


-2

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

Modifica: questo è chiaramente sbagliato. Lasciato per i commenti utili di seguito.


1
la risposta alla tua domanda è No come menzionato da @Tim. La pagina a cui puntava diceva che se le impostazioni delle app non possono essere caricate, viene generata un'eccezione. Ma se un valore non è presente nelle impostazioni dell'app, non otterrai un'eccezione. Non avrebbe davvero senso lanciare un errore solo perché un valore non esiste in un dizionario. Ma se il dizionario non esistesse, sarebbe un motivo per lanciare un errore. (Il termine dizionario è stato usato solo per riferirsi a una raccolta arbitraria.)
spinone

Quel collegamento dice che viene lanciata un'eccezione se NameValueCollectionnon è stato possibile trovare, ovvero il sistema non è riuscito a trovare alcuna impostazione. Le raccolte di valori del nome non generano un'eccezione quando si tenta di recuperare un singolo valore che non esiste ..
Dexter
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.