Czy ConfigurationManager.AppSettings [„bla”] zgłosi wyjątek, jeśli „blah” nie istnieje?

124

Czy ConfigurationManager.AppSettings ["bla"] zgłosi wyjątek, jeśli "blah" nie istnieje w pliku web / app.config?

Szczere przeprosiny za super leniwe pytanie.

Ben Aston
źródło
5
-1: Skoro już zdałeś sobie sprawę, że to leniwe pytanie, czy po prostu wypróbowanie go nie będzie mniej pracochłonne niż umieszczenie tego pytania tutaj?
Lasse V. Karlsen,
Albo przeglądając dokumentację NameValueCollection.Itemnieruchomości ...
Tim Robinson
2
Dziękuję tym, którzy odpowiedzieli. Postaram się nie mieć w zwyczaju takich pytań.
Ben Aston,
49
Pfh. Kontynuuj zadawanie takich pytań, ponieważ ja i reszta świata google configurationmanager appsettings nie istnieje klucz, ponieważ jest to łatwiejsze niż analizowanie MSDN. Wszystko, co ułatwia życie IMO. Uznano, ponieważ F te Dbags.
Cory Mawhorter
31
Spójrz na swoje leniwe pytanie, które oszczędza innym ludziom kilka minut 4 lata i liczy. :)
Matt Beckman

Odpowiedzi:

133

Nie, wraca null.

Tim Robinson
źródło
25

Z dokumentacji MSDN dla właściwości NameValueCollection.Item (String) :

Uwaga

Ta właściwość zwraca wartość null w następujących przypadkach: 1) jeśli określony klucz nie zostanie znaleziony; i 2) jeśli określony klucz zostanie znaleziony, a skojarzona z nim wartość to null. Ta właściwość nie rozróżnia tych dwóch przypadków.

Martin Liversage
źródło
7

Nie, wraca null.

AppSettings to NameValueCollection - zgodnie z ostrzeżeniem na stronie NameValueCollection.Get :

Ta metoda zwraca odwołanie o wartości null (Nothing w Visual Basic) w następujących przypadkach: 1) jeśli określony klucz nie zostanie znaleziony; i 2) jeśli określony klucz zostanie znaleziony, a skojarzona z nim wartość jest odwołaniem o wartości null (nic w języku Visual Basic). Ta metoda nie rozróżnia tych dwóch przypadków.

Dexter
źródło
6

Nie, wraca null.

ConfigurationManager.AppSettingsto NameValueCollection- z dokumentacji MSDN :

Metoda Get nie rozróżnia między wartością null, która jest zwracana, ponieważ nie znaleziono określonego klucza, a wartością null, która jest zwracana, ponieważ wartość skojarzona z kluczem jest równa null.

(moje podkreślenie)

Andrzej
źródło
3

Inne odpowiedzi odnoszą się do dokumentacji właściwości Item. Może nie być od razu oczywiste, dlaczego są one odpowiednie, patrząc na następujący fragment kodu.

ConfigurationManager.AppSettings["blah"]

Składnia nawiasu kwadratowego jest używana w języku C # do uzyskiwania dostępu do indeksatorów. Są to specjalne właściwości, które umożliwiają indeksowanie klasy w taki sam sposób, jak tablica. Patrząc na definicję właściwości NameValueCollection.Item , zauważysz, że nie używa ona normalnej składni właściwości. Słowo kluczowe this i parametry indeksatora służą do definiowania tej właściwości jako indeksatora.

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

W dokumentacji indeksatory mają niejawną nazwę Item, a parametry są otoczone nawiasami kwadratowymi.

Indeksatory, jak pokazano w dokumentacji MSDN.

Nie jest dla mnie jasne, dlaczego pojawiły się odpowiedzi odwołujące się do metody Get - może jedna wywołuje drugą?

W każdym razie, aby odpowiedzieć na pytanie ...

Nie. Wyjątek nie zostanie zgłoszony, jeśli uzyskasz dostęp do nieistniejącego klucza - zostanie zwrócona wartość null.

Oto odpowiednia sekcja dokumentacji właściwości NameValueCollection.Item .

Ta właściwość zwraca wartość null w następujących przypadkach: 1) jeśli określony klucz nie zostanie znaleziony; i 2) jeśli określony klucz zostanie znaleziony, a skojarzona z nim wartość to null. Ta właściwość nie rozróżnia tych dwóch przypadków.

Scott Munro
źródło
-2

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

Edycja: to jest ewidentnie błędne. Zostawiłem pomocne komentarze poniżej.

Ben Aston
źródło
1
odpowiedź na Twoje pytanie brzmi: Nie jak wspomniano w @Tim. Wskazana strona właśnie powiedziała, że ​​jeśli appsettings nie można załadować, generowany jest wyjątek. Ale jeśli wartość po prostu nie jest obecna w appsettings, nie otrzymasz wyjątku. Naprawdę nie miałoby sensu zgłaszanie błędu tylko dlatego, że wartość nie istnieje w słowniku. Ale gdyby słownik nie istniał, byłby to powód do rzucenia błędu. (Termin słownik został właśnie użyty w odniesieniu do dowolnego zbioru.)
spinon
Ten link mówi, że wyjątek jest generowany, jeśli NameValueCollectionnie można znaleźć - tj. System nie mógł znaleźć żadnych ustawień. Kolekcje wartości nazw nie generują wyjątku, gdy próbujesz pobrać pojedynczą wartość, która nie istnieje.
Dexter