2017-03-28 2 views
0

wirft Ich habeWörterbuch keine Ausnahme für nicht existierenden Schlüssel

CurrentAppSimulator.LicenseInformation.ProductLicenses["nonexistentEntry"] 

(MSDN)

und es nicht eine Ausnahme werfen.

Wird das erwartet? Wird es das immer tun?

+0

Das kann nicht Ihre ganze Aussage sein, es würde nicht über den Compiler kommen. 'Nur Zuweisungen, Aufrufe, Inkremente, Dekremente und neue Objektausdrücke können als Anweisung verwendet werden ' –

+0

@RufusL Richtig. Es ist 'var l = ...;'. Ich zeigte nur den wahrscheinlich relevanten Teil. – ispiro

+0

Veröffentlichen Sie bitte die gesamte Aussage. –

Antwort

2

Wie ein Kommentator oben geschrieben, so scheint es, dass, obwohl die Variable ein IReadOnlyDictionary ist - die nicht beweisen, dass es ein Dictionary ist. Es könnte anders implementiert werden.

+0

Nur um ein bisschen mehr Tiefe hinzuzufügen. Schnittstellen garantieren nur die * Form *, nicht das * Verhalten *. –

2

Wie ich in den Kommentaren erwähnt:

LicenseInformation.ProductLicenses kein Wörterbuch ist. Laut Dokumentationen ist es IReadOnlyDictionary.

Ich habe keine Informationen über das Verhalten oder die Implementierung gefunden, aber wenn Sie es in Runtime überprüfen, können Sie herausfinden, dass es System .__ ComObject: System.MarshalByRefObject ist. Es bedeutet, dass es definitiv kein Wörterbuch ist.

Es ist besser, das Vorhandensein eines Schlüssels vor dem Zugriff zu überprüfen, da es keine Sicherheit gibt, dass sich das Verhalten in Zukunft nicht ändern wird.

+0

Dies ist das beste Szenario. Prüfen Sie immer, ob der Schlüssel vorhanden ist, bevor Sie versuchen, darauf zuzugreifen, insbesondere, wenn Sie zu einem späteren Zeitpunkt Änderungen vornehmen möchten, wie in der Antwort beschrieben. –

Verwandte Themen