Будет ли ConfigurationManager.AppSettings [ "blah" ] выдавать исключение, если "бла" не существует?

Будет ли ConfigurationManager.AppSettings [ "blah" ] выдавать исключение, если "blah" не существует в web/app.config?

Искренние извинения за сверх ленивый вопрос.

Ответ 1

Нет, он возвращает null.

Ответ 2

Из Документация MSDN для NameValueCollection.Item Property (String):

Внимание

Это свойство возвращает null в следующих случаях: 1) если указанный ключ не найден; и 2) если найденный ключ найден, и его связанное значение равно нулю. Это свойство не различает два случая.

Ответ 3

Нет, он возвращает null.

ConfigurationManager.AppSettings является NameValueCollection - из документации MSDN:

Метод Get не различает между null, который возвращается, потому что указанный ключ не найден и null, который возвращается, поскольку значение, связанное с ключом, равно null.

(мой акцент)

Ответ 4

Нет, он возвращает null.

AppSettings - это NameValueCollection - согласно предостережение на странице NameValueCollection.Get:

Этот метод возвращает нулевую ссылку (Ничего в Visual Basic) в в следующих случаях: 1) если указанные ключ не найден; и 2) если указанный ключ найден и его связанное значение - это нулевая ссылка (Ничего в Visual Basic). Этот метод не различает два случаев.

Ответ 5

Другие ответы ссылаются на документацию для свойства Item. Возможно, не сразу видно, почему они имеют отношение к следующему фрагменту кода.

ConfigurationManager.AppSettings["blah"]

Синтаксис квадратной скобки используется в С# для доступа к индексаторам. Это специальные свойства, которые позволяют индексировать класс таким же образом, как и массив. Глядя на определение свойства NameValueCollection.Item, вы заметите, что он не использует синтаксис нормального свойства. Это ключевое слово и параметры индексатора используются для определения этого свойства как индексатора.

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

В документации индексаторы неявно называются Item, а параметры окружены квадратными скобками.

Indexers as shown in the MSDN documentation.

Мне непонятно, почему были ответы, которые ссылались на метод Get - может быть, один вызывает другой?

Во всяком случае, чтобы ответить на вопрос...

Нет. Исключение не будет выбрано, если вы получите доступ к несуществующему ключу - возвращается null.

Вот соответствующий раздел из документации свойств NameValueCollection.Item.

Это свойство возвращает null в следующих случаях: 1) если указанное ключ не найден; и 2) если указанный ключ найден и его связанное значение равно null. Это свойство не различает два случая.