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.