O ConfigurationManager.AppSettings ["blah"] lançará uma exceção se "blah" não existir?

124

O ConfigurationManager.AppSettings ["blah"] lançará uma exceção se "blah" não existir no web / app.config?

Desculpas sinceras pela pergunta super preguiçosa.

Ben Aston
fonte
5
-1: Como você já percebeu que é uma pergunta preguiçosa, na verdade, não seria apenas menos trabalhoso do que postar essa pergunta aqui?
Lasse V. Karlsen
Ou olhando para a documentação para a NameValueCollection.Itempropriedade ...
Tim Robinson
2
Obrigado a quem respondeu. Vou tentar e não criar o hábito de perguntas como estas.
Ben Aston
49
Pfh. Continue fazendo perguntas como essa porque eu e o resto do mundo aplicativos inexistentes appsettings chave inexistente porque é mais fácil do que analisar o MSDN. Qualquer coisa que torne a vida um pouco mais fácil na IMO. Votado porque F esses Dbags.
Cory Mawhorter
31
Olhe para sua pergunta preguiçosa, poupando outras pessoas em alguns minutos 4 anos e contando. :)
Matt Beckman

Respostas:

133

Não, ele retorna null.

Tim Robinson
fonte
25

Na documentação do MSDN da propriedade NameValueCollection.Item (String) :

Cuidado

Esta propriedade retorna nulo nos seguintes casos: 1) se a chave especificada não for encontrada; e 2) se a chave especificada for encontrada e seu valor associado for nulo. Esta propriedade não faz distinção entre os dois casos.

Martin Liversage
fonte
7

Não, ele retorna null.

AppSettings é um NameValueCollection - conforme o cuidado na página NameValueCollection.Get :

Este método retorna uma referência nula (Nada no Visual Basic) nos seguintes casos: 1) se a chave especificada não for encontrada; e 2) se a chave especificada for encontrada e seu valor associado for uma referência nula (Nada no Visual Basic). Este método não distingue entre os dois casos.

Dexter
fonte
6

Não, ele retorna null.

ConfigurationManager.AppSettingsé um NameValueCollection- da documentação do MSDN :

O método Get não distingue entre nulo retornado porque a chave especificada não foi encontrada e nulo retornado porque o valor associado à chave é nulo.

(minha ênfase)

Andrew
fonte
3

Outras respostas fazem referência à documentação da propriedade Item. Pode não ser imediatamente óbvio por que eles são relevantes para o seguinte trecho de código.

ConfigurationManager.AppSettings["blah"]

A sintaxe entre colchetes é usada em C # para acessar indexadores. Essas são propriedades especiais que permitem que uma classe seja indexada da mesma maneira que uma matriz pode ser. Observando a definição da propriedade NameValueCollection.Item , você notará que ela não usa a sintaxe da propriedade normal. Os parâmetros this keyword e indexer são usados ​​para definir essa propriedade como um indexador.

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

Na documentação, os indexadores são implicitamente denominados Item e os parâmetros são colocados entre colchetes.

Indexadores, como mostrado na documentação do MSDN.

Não está claro para mim por que houve respostas que referenciaram o método Get - talvez um chame o outro?

De qualquer forma, para responder à pergunta ...

Não. Uma exceção não será lançada se você acessar uma chave inexistente - um nulo será retornado.

Aqui está a seção relevante da documentação da propriedade NameValueCollection.Item .

Esta propriedade retorna nulo nos seguintes casos: 1) se a chave especificada não for encontrada; e 2) se a chave especificada for encontrada e seu valor associado for nulo. Esta propriedade não faz distinção entre os dois casos.

Scott Munro
fonte
-2

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

Edit: isso está claramente errado. Esquerda para os comentários úteis abaixo.

Ben Aston
fonte
1
a resposta para sua pergunta é Não, como o @Tim mencionado. A página apontou apenas que, se as configurações de aplicativos não puderem ser carregadas, uma exceção será lançada. Mas se um valor simplesmente não estiver presente nas configurações de aplicativos, você não receberá uma exceção. Realmente não faria sentido lançar um erro apenas porque um valor não existe em um dicionário. Mas se o dicionário não existisse, isso seria um motivo para gerar um erro. (O termo dicionário foi apenas utilizado para se referir a uma colecção arbitrária.)
spinon
Esse link diz que uma exceção será lançada se NameValueCollectionnão for encontrada - ou seja, o sistema não encontrou nenhuma configuração. Nome Valor coleções não uma exceção quando você tenta recuperar um único valor que não existe ..
Dexter