Wie kann ich nach einer leeren generic.dictionary-Sammlung suchen?

9

Wie teste ich ein generisches Wörterbuchobjekt, um festzustellen, ob es leer ist? Ich möchte einen Code wie folgt ausführen:

%Vor%

Das Objekt reportGraph ist vom Typ System.Collections.Generic.Dictionary Wenn Sie diesen Code ausführen, ist das reportGraphs-Wörterbuch leer und MoveNext () gibt sofort eine NullReferenceException aus. Ich möchte keinen Try-Catch um den Block setzen, wenn es eine performantere Art gibt, mit der leeren Sammlung umzugehen.

Danke.

    
DEH 18.01.2010, 20:23
quelle

3 Antworten

15

Wenn es ein allgemeines Wörterbuch ist, können Sie einfach Dictionary.Count . Count ist 0, wenn es leer ist.

In Ihrem Fall sieht reportGraphs jedoch wie ein IEnumerator<T> aus - gibt es einen Grund, Ihre Sammlung manuell aufzulisten?

    
Reed Copsey 18.01.2010, 20:25
quelle
6

Es besteht ein Unterschied zwischen einem empty dictionary und null . Das Aufrufen von MoveNext für eine leere Sammlung führt nicht zu einem NullReferenceException . Ich denke, in Ihrem Fall könnten Sie testen, ob reportGraphs != null .

    
Darin Dimitrov 18.01.2010 20:25
quelle
3

Wie Darin gesagt hat, ist reportGraphs null , wenn es eine NullReferenceException wirft. Der beste Weg wäre sicherzustellen, dass es niemals null ist (d. H. Sicherstellen, dass es im Konstruktor Ihrer Klasse initialisiert wird).

Eine andere Möglichkeit, dies zu tun (um eine explizite Aufzählung zu vermeiden), wäre die Verwendung einer foreach -Anweisung:

%Vor%

[Bearbeiten] Beachten Sie, dass in diesem Beispiel auch angenommen wird, dass reportGraphs niemals null ist.

    
Groo 18.01.2010 20:30
quelle