¿ConfigurationManager.AppSettings ["blah"] arrojará una excepción si no existe "blah"?

124

¿ConfigurationManager.AppSettings ["blah"] arrojará una excepción si "blah" no existe en la web / app.config?

Sinceras disculpas por la pregunta súper perezosa.

Ben Aston
fuente
55
-1: Puesto que ya has dado cuenta de que es una pregunta perezoso, sería en realidad no sólo tratando que sea menos trabajo que la publicación de esta pregunta aquí?
Lasse V. Karlsen
O mirando la documentación de la NameValueCollection.Itempropiedad ...
Tim Robinson
2
Gracias a los que respondieron. Intentaré no acostumbrarme a preguntas como estas.
Ben Aston
49
Pfh. Continúe haciendo preguntas como esta porque yo y el resto del mundo, la configuración de la aplicación de administrador de configuración de Google no existe porque es más fácil que analizar MSDN. Cualquier cosa que haga la vida un poco más fácil en mi opinión. Votó porque F esos Dbags.
Cory Mawhorter
31
Mire su pregunta perezosa ahorrando a otras personas unos minutos de tiempo 4 años y contando. :)
Matt Beckman

Respuestas:

133

No, vuelve null.

Tim Robinson
fuente
7

No, vuelve null.

AppSettings es una NameValueCollection , según la advertencia en la página NameValueCollection . Obtenga :

Este método devuelve una referencia nula (Nothing en Visual Basic) en los siguientes casos: 1) si no se encuentra la clave especificada; y 2) si se encuentra la clave especificada y su valor asociado es una referencia nula (Nothing en Visual Basic). Este método no distingue entre los dos casos.

Diestro
fuente
6

No, vuelve null.

ConfigurationManager.AppSettingses un NameValueCollection- de la documentación de MSDN :

El método Get no distingue entre nulo que se devuelve porque no se encuentra la clave especificada y nulo que se devuelve porque el valor asociado con la clave es nulo.

(mi énfasis)

Andrés
fuente
3

Otras respuestas hacen referencia a la documentación de la propiedad Artículo. Es posible que no sea inmediatamente obvio por qué son relevantes mirando el siguiente fragmento de código.

ConfigurationManager.AppSettings["blah"]

La sintaxis de corchetes se usa en C # para acceder a los indexadores. Estas son propiedades especiales que permiten indexar una clase de la misma manera que una matriz. Si observa la definición de la propiedad NameValueCollection.Item , notará que no utiliza la sintaxis de propiedad normal. La palabra clave this y los parámetros del indexador se utilizan para definir esta propiedad como un indexador.

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

En la documentación, los indexadores se denominan implícitamente Item y los parámetros están entre corchetes.

Indizadores como se muestra en la documentación de MSDN.

No me queda claro por qué hubo respuestas que hicieron referencia al método Get , ¿tal vez una llama a la otra?

En cualquier caso, para responder la pregunta ...

No. No se lanzará una excepción si accede a una clave inexistente; se devolverá un valor nulo.

Aquí está la sección relevante de la documentación de propiedad NameValueCollection.Item .

Esta propiedad devuelve nulo en los siguientes casos: 1) si no se encuentra la clave especificada; y 2) si se encuentra la clave especificada y su valor asociado es nulo. Esta propiedad no distingue entre los dos casos.

Scott Munro
fuente
-2

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

Editar: esto está claramente mal. A la izquierda para los comentarios útiles a continuación.

Ben Aston
fuente
1
La respuesta a su pregunta es No como @Tim mencionado. La página apuntaba a que acaba de decir que si no se pueden cargar las aplicaciones, se lanza una excepción. Pero si un valor simplemente no está presente en la configuración de la aplicación, entonces no obtendrá una excepción. Realmente no tendría sentido lanzar un error solo porque no existe un valor en un diccionario. Pero si el diccionario no existiera, esa sería una razón para lanzar un error. (El término diccionario se usó para referirse a una colección arbitraria.)
spinon
Ese enlace dice que se produce una excepción si NameValueCollectionno se puede encontrar, es decir, el sistema no puede encontrar ninguna configuración. Name Value Collections no arroja una excepción cuando intenta recuperar un valor único que no existe ..
Dexter