Чи призведе ConfigurationManager.AppSettings [“blah” виняток, якщо “blah” не існує?


124

Чи призведе ConfigurationManager.AppSettings ["blah" виняток, якщо "blah" не існує у веб / app.config?

Щирі вибачення за надто ліниве запитання.


5
-1: Оскільки ви вже зрозуміли, що це ледаче запитання, чи не буде насправді просто намагатися бути меншою роботою, ніж опублікувати це запитання тут?
Лассе В. Карлсен

Або переглянувши документацію на NameValueCollection.Itemмайно ...
Тім Робінсон,

2
Дякую тим, хто відповів. Я спробую не звикати таких питань.
Бен Астон

49
Pfh. Будь ласка, продовжуйте задавати подібні запитання, тому що у мене та інших країн світу налаштування google configmanager не існує ключа, оскільки це простіше, ніж розбирати MSDN. Все, що робить життя трохи простішим ІМО. Запропоновано тому, що F ці сумки.
Cory Mawhorter

31
Подивіться на ваше ледаче запитання, рятуючи інших людей кілька хвилин часу 4 роки і рахуючи. :)
Метт Бекман

Відповіді:



25

З документації MSDN для NameValueCollection.Item властивості (рядка) :

Обережність

Ця властивість повертає нуль у таких випадках: 1) якщо вказаний ключ не знайдено; і 2) якщо вказаний ключ знайдений і пов'язане з ним значення є нульовим. Ця властивість не відрізняє двох випадків.


7

Ні, повертається null.

AppSettings - це NameValueCollection - відповідно до застереження на сторінці NameValueCollection.Get :

Цей метод повертає нульову посилання (Нічого у Visual Basic) у таких випадках: 1) якщо вказаний ключ не знайдено; і 2) якщо вказаний ключ знайдений і пов'язане з ним значення є нульовою посиланням (Нічого у Visual Basic). Цей метод не розрізняє два випадки.


6

Ні, повертається null.

ConfigurationManager.AppSettingsє NameValueCollection- з документації MSDN :

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

(мій акцент)


3

Інші відповіді посилаються на документацію для властивості Item. Це може бути не відразу зрозуміло, чому вони доречні, дивлячись на наступний фрагмент коду.

ConfigurationManager.AppSettings["blah"]

Синтаксис квадратного дужки використовується в C # для доступу до індексів. Це спеціальні властивості, які дозволяють індексувати клас так само, як це може бути масив. Переглядаючи визначення властивості NameValueCollection.Item , ви помітите, що воно не використовує звичайний синтаксис властивості. Це ключове слово та параметри індексатора використовуються для визначення цієї властивості як індексатора.

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

У документації індексатори неявно названі Елемент, а параметри оточені квадратними дужками.

Індексатори, як показано в документації MSDN.

Мені незрозуміло, чому з'явилися відповіді, на які посилався метод Get - можливо, один дзвонить іншому?

У будь-якому випадку, щоб відповісти на питання ...

Ні. Виняток не буде викинуто, якщо ви отримаєте доступ до неіснуючого ключа - нуль буде повернуто.

Ось відповідний розділ документації щодо властивостей NameValueCollection.Item .

Ця властивість повертає нуль у таких випадках: 1) якщо вказаний ключ не знайдено; і 2) якщо вказаний ключ знайдений і пов'язане з ним значення є нульовим. Ця властивість не відрізняє двох випадків.


-2

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

Редагувати: це явно неправильно. Залишив корисні коментарі нижче.


1
відповідь на ваше запитання - Ні, як @Tim згадується. Сторінка вказувала лише на те, що якщо програми не вдається завантажити, викидається виняток. Але якщо значення в програмах просто немає, ви не отримаєте винятку. Насправді не було б сенсу кидати помилку лише тому, що значення у словнику не існує. Але якщо словника не існувало, то це буде приводом для помилки. (Термін словник був щойно використаний для позначення довільної колекції.)
спінон

Це посилання говорить, що виняток видається, якщо його NameValueCollectionне вдалося знайти - тобто система не змогла знайти жодних налаштувань. Колекції значень імен не викидають винятку, коли ви намагаєтеся отримати єдине значення, яке не існує ..
Dexter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.