2010-08-10 7 views
5

Un peu d'une question de base, mais qui semble me bloquer, néanmoins.Que signifient les génériques imbriqués en C#?

donné une "générique imbriquée":

IEnumerable<KeyValuePair<TKey, TValue>> 

Est-ce que IEnumerable déclarant peut avoir des types génériques qui sont eux-mêmes de KeyValuePair?

Merci,

Scott

Répondre

6

Oui. Le type KeyValuePair attend deux paramètres de type générique. Nous pouvons soit les remplir en pointant les types de béton:

IEnumerable<KeyValuePair<string, int>> 

Ou nous pouvons les remplir en utilisant d'autres paramètres génériques déjà spécifiés par la classe externe:

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

paramètres de type générique sont toujours indiqués « à -use ", ou au point où vous utilisez la classe ou la méthode qui les requiert. Et comme tout autre paramètre, vous pouvez le remplir avec une valeur constante, codée en dur (ou tapez dans ce cas), ou une autre variable.

+0

Merci! Comme je l'ai dit, semble toujours me percer, mais bon de savoir que je suis sur le bon chemin. –

1

Oui, cela est "IEnumerable de paires clé/valeur." Il serait déclaré ainsi:

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

Ou similaire. A propos de la seule pensée que je pense que cet usage particulier ferait est de vous permettre d'avoir un "dictionnaire" avec des touches répétées.

+0

Hmm, quand est-ce qu'on est devenu capable de faire de nouveaux IEnumerables? ;) –

+0

this * fait partie * du contrat Dictionary. L'unicité est simplement appliquée implicitement plutôt qu'explicitement. –

1

Dans une coquille de noix, cela signifie que lorsque vous énumérez sur cette IEnumerable, vous allez obtenir KeyValuePair<TKey, TValue> (pour tout type TKey et TValue sont fixés à).

Alors, oui.

0

Ici

IEnumerable<KeyValuePair<string, int>> 

Le IEnumerable lui-même est pas un générique. Il sait qu'il va contenir KeyValuePair. KeyValuePair est le générique qui peut contenir 2 types génériques.

Questions connexes