Будет ли ConfigurationManager.AppSettings ["blah"] генерировать исключение, если "blah" не существует в файле web / app.config?
Искренние извинения за супер ленивый вопрос.
NameValueCollection.Itemсобственность ...
Будет ли ConfigurationManager.AppSettings ["blah"] генерировать исключение, если "blah" не существует в файле web / app.config?
Искренние извинения за супер ленивый вопрос.
NameValueCollection.Itemсобственность ...
Ответы:
Нет, возвращается null.
Из документации MSDN для свойства NameValueCollection.Item (String) :
предосторожность
Это свойство возвращает null в следующих случаях: 1) если указанный ключ не найден; и 2) если указанный ключ найден и связанное с ним значение равно нулю. Это свойство не делает различия между двумя случаями.
Нет, возвращается null.
AppSettings - это NameValueCollection - согласно предупреждению на странице NameValueCollection.Get :
Этот метод возвращает пустую ссылку (Nothing в Visual Basic) в следующих случаях: 1) если указанный ключ не найден; и 2) если указанный ключ найден и связанное с ним значение является пустой ссылкой (ничего в Visual Basic). Этот метод не делает различий между двумя случаями.
Нет, возвращается null.
ConfigurationManager.AppSettingsэто NameValueCollection- из документации MSDN :
Метод Get не различает значение null, которое возвращается, потому что указанный ключ не найден, и null, которое возвращается, потому что значение, связанное с ключом, равно null.
(мой акцент)
Другие ответы ссылаются на документацию по свойству Item. Может быть не сразу понятно, почему они актуальны, глядя на следующий фрагмент кода.
ConfigurationManager.AppSettings["blah"]
Синтаксис квадратных скобок используется в C # для доступа к индексаторам. Это специальные свойства, которые позволяют индексировать класс так же, как и массив. Глядя на определение свойства NameValueCollection.Item , вы заметите, что оно не использует обычный синтаксис свойства. Ключевое слово this и параметры индексатора используются для определения этого свойства как индексатора.
public string this[
string name
] { get; set; }
В документации индексаторы неявно называются Item, а параметры заключаются в квадратные скобки.

Мне непонятно, почему были ответы, которые ссылались на метод Get - может быть, один вызывает другой?
Во всяком случае, чтобы ответить на вопрос ...
Нет. Исключение не будет создано, если вы получите доступ к несуществующему ключу - будет возвращено значение null.
Вот соответствующий раздел документации по свойству NameValueCollection.Item .
Это свойство возвращает null в следующих случаях: 1) если указанный ключ не найден; и 2) если указанный ключ найден и связанное с ним значение равно нулю. Это свойство не делает различия между двумя случаями.
Да http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx
Изменить: это явно неправильно. Оставил за полезными комментариями ниже.
NameValueCollectionне удалось найти, то есть система не может найти никаких настроек. Коллекции значений имени не вызывают исключения, когда вы пытаетесь получить одно несуществующее значение ..