Будет ли ConfigurationManager.AppSettings [«бла»] генерировать исключение, если «бла» не существует?

124

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

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

Бен Астон
источник
5
-1: Поскольку вы уже поняли, что это ленивый вопрос, не будет ли на самом деле просто попытка сделать это меньше работы, чем публикация этого вопроса здесь?
Лассе В. Карлсен
Или посмотрите документацию на NameValueCollection.Itemсобственность ...
Тим Робинсон
2
Спасибо тем, кто ответил. Я постараюсь не задавать такие вопросы привычкой.
Ben Aston
49
PFH. Пожалуйста, продолжайте задавать подобные вопросы, потому что я и остальной мир google configurationmanager appsettings несуществующий ключ, потому что это проще, чем разбор MSDN. Все, что делает жизнь немного проще, ИМО. Проголосовали, потому что F те Dbags.
Кори Мохортер
31
Посмотрите на свой ленивый вопрос, который сэкономит другим людям несколько минут времени, 4 года и их количество. :)
Мэтт Бекман

Ответы:

133

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

Тим Робинсон
источник
25

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

предосторожность

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

Мартин Ливерсаж
источник
7

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

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

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

правый
источник
6

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

ConfigurationManager.AppSettingsэто NameValueCollection- из документации MSDN :

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

(мой акцент)

Андрей
источник
3

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

ConfigurationManager.AppSettings["blah"]

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

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

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

Индексаторы, как показано в документации MSDN.

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

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

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

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

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

Скотт Манро
источник
-2

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

Изменить: это явно неправильно. Оставил за полезными комментариями ниже.

Бен Астон
источник
1
ответ на ваш вопрос не похож на упомянутый @Tim. На указанной странице только что сказано, что если настройки приложения не могут быть загружены, генерируется исключение. Но если значение просто отсутствует в настройках приложения, вы не получите исключения. На самом деле не имеет смысла выдавать ошибку только потому, что значение не существует в словаре. Но если бы словаря не было, это было бы причиной выдачи ошибки. (Термин «словарь» использовался для обозначения произвольной коллекции.)
spinon
Эта ссылка говорит о том, что создается исключение, если NameValueCollectionне удалось найти, то есть система не может найти никаких настроек. Коллекции значений имени не вызывают исключения, когда вы пытаетесь получить одно несуществующее значение ..
Декстер,