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.


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:




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.


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)


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.


-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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.