Чи призведе 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.