2010-07-06 10 views
85

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

Szczerze przepraszam za bardzo leniwe pytanie.

+5

-1: Skoro już zdawałeś sobie sprawę, że jest to leniwy pytanie, czy nie próbowałbyś go po prostu * mniej * pracy, niż opublikowanie tego pytania tutaj? –

+0

Lub patrząc na dokumentację właściwości ['NameValueCollection.Item'] (http://msdn.microsoft.com/en-us/library/8d0bzeeb.aspx) ... –

+2

Dziękuję tym, którzy odpowiedzieli. Postaram się nie nawykad takich pytań. – Ben

Odpowiedz

95

Nie, zwraca null.

+12

+1, ponieważ właśnie to chcę robić –

-2

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

Edycja: jest to wyraźnie źle. Pozostały do ​​przydatnych komentarzy poniżej.

+1

odpowiedź na twoje pytanie brzmi: nie tak, jak wspomniany @Tim. Strona wskazywała na to, że jeśli nie można wczytać aplikacji, zostanie zgłoszony wyjątek. Ale jeśli wartość nie jest obecna w appsettings, nie dostaniesz wyjątku. Naprawdę nie ma sensu zgłaszanie błędu tylko dlatego, że w słowniku nie ma wartości. Ale jeśli słownik nie istniał, byłby to powód, by rzucić błąd. (Termin słownik był używany tylko w odniesieniu do dowolnej kolekcji). – spinon

+0

To łącze mówi, że wyjątek zostanie zgłoszony, jeśli nie można znaleźć "NameValueCollection" - tzn. System nie może znaleźć * żadnych * ustawień. Kolekcje wartości nazwy nie zgłaszają wyjątku przy próbie pobrania pojedynczej wartości, która nie istnieje. – Dexter

4

Nie, zwraca null.

ConfigurationManager.AppSettings jest NameValueCollection - z the MSDN documentation:

metody GET nie rozróżnia między zerowy, który jest zwrócony ponieważ podany klucz nie zostanie znaleziony i NULL, który jest zwracany, ponieważ wartość powiązany z kluczem ma wartość NULL.

(podkreślenie moje)

4

Nie, to wraca null.

AppSettings jest NameValueCollection - jak na caution na NameValueCollection.Get stronie:

Ta metoda zwraca pustą referencję (Nothing w języku Visual Basic) w następujących przypadkach: 1) jeżeli określony klucz nie znaleziono; i 2) jeśli określony klucz zostanie znaleziony, a jego powiązaną wartością jest zerowa wartość odniesienia (Nic w języku Visual Basic). Ta metoda nie rozróżnia dwóch przypadków .

1

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

ConfigurationManager.AppSettings["blah"] 

Składnia nawiasów kwadratowych jest używana w języku C# w celu uzyskania dostępu do indeksatorów. Są to specjalne właściwości, które umożliwiają indeksowanie klasy w taki sam sposób, jak może to być 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.To słowo kluczowe i parametry indeksera są używane do zdefiniowania tej właściwości jako indeksatora.

W dokumentacji indeksatory są niejawnie nazwane Pozycje i parametry są otoczone nawiasami kwadratowymi.

Indexers as shown in the MSDN documentation.

To nie jest dla mnie jasne, dlaczego nie było odpowiedzi, które użyte metody Get - może jeden nazywa drugiego?

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

nr wyjątek nie zostanie wyrzucony jeśli dostęp nieistniejący klucz - zostaną zwrócone null.

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

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

Powiązane problemy