Будет ли 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 года и их количество. :)
— Мэтт Бекман

Ответы:



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не удалось найти, то есть система не может найти никаких настроек. Коллекции значений имени не вызывают исключения, когда вы пытаетесь получить одно несуществующее значение ..
— Декстер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.