2010-08-10 4 views
5

Ein bisschen eine grundlegende Frage, aber eine, die mich dennoch zu stumpfen scheint.Was bedeuten verschachtelte Generika in C#?

eine "verschachtelte generic" Gegeben:

IEnumerable<KeyValuePair<TKey, TValue>> 

Ist das besagt, dass IEnumerable generische Typen haben können, die sich KeyValuePair sind ‚s?

Danke,

Scott

Antwort

6

Ja. Der KeyValuePair-Typ erwartet zwei generische Typparameter. Wir können entweder sie füllen, indem konkrete Typen zeigen:

IEnumerable<KeyValuePair<string, int>> 

Oder wir können sie bevölkern von anderen generischen Parametern mit bereits von der Außenklasse:

class Dictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> 

generischer Typparameter wird immer angegeben „an -use "oder an dem Punkt, an dem Sie die Klasse oder Methode verwenden, die sie benötigt. Und genau wie bei jedem anderen Parameter können Sie ihn mit einem konstanten, fest codierten Wert (oder in diesem Fall Typ) oder einer anderen Variablen füllen.

+0

Danke! Wie ich schon sagte, stolpert mich immer, aber gut zu wissen, dass ich auf dem richtigen Weg bin. –

1

Ja, das "Ein IEnumerable von Schlüssel/Wert-Paaren." Ist Es würde so erklärt werden:

IEnumberable<KeyValuePair<string, string>> reallyComplicatedDictionary = 
    new IEnumerable<KeyValuePair<string, string>>(); 

Oder ähnlich.

Über das einzige denke, ich denke, dass diese besondere Verwendung tun würde, ist es Ihnen zu ermöglichen, ein "Wörterbuch" mit wiederholten Schlüsseln zu haben.

+0

Hmm, wann sind wir in der Lage neue IEnumerables zu erstellen? ;) –

+0

dieser * ist * Teil des Wörterbuchvertrages. Die Eindeutigkeit wird nur implizit und nicht explizit erzwungen. –

1

In einer Nussschale, bedeutet dies, dass, wenn Sie, dass IEnumerable aufzählen über, Sie KeyValuePair<TKey, TValue> (für was auch immer Arten TKey und TValue gesetzt sind) zu bekommen sind.

Also, ja.

0

Hier

IEnumerable<KeyValuePair<string, int>> 

Die IEnumerable selbst ist kein generisch. Es weiß, dass es KeyValuePair enthalten wird. Hier ist KeyValuePair das generische, das 2 generische Typen enthalten kann.