2010-08-15 11 views
4

Je suis aux prises avec des génériques. Voici ma configuration:Générique dans la contrainte de type

interface I<T> { } 

[...] 
void Add<T>(T obj) where T : I<??> { } 

Comment puis-je faire en sorte que T dans la méthode Add implémente I?

+0

Désolé - 'add' est pas partie de l'interface' I' mais une méthode sur une autre classe –

Répondre

8

La signature suivante permettra Add de prendre toute T qui implémente I<> avec tous les paramètres de type.

void Add<T,S>(T obj) where T : I<S> { 
} 

L'inconvénient d'utiliser cette signature de la méthode est que l'inférence de type ne se déclenche pas et vous devez spécifier tous les paramètres de type, ce qui semble carrément stupide:

blah.Add<I<int>, int>(iInstance); 

beaucoup plus simple approche consiste à utiliser la signature ci-dessous:

void Add<T>(I<T> obj) { 
} 
+0

'void Ajoutez (I obj)' l'a fait. Merci! –

1

Vous devez transmettre le paramètre T pour l'ajouter également.

void Add<TI, TAny>(TI obj) where TI : I<TAny> 
+0

'TI' est un paramètre générique, pas un générique lui-même, donc vous ne pouvez pas faire «TI ». Votre paramètre ne devrait-il pas être juste "TI"? Et votre contrainte devrait être 'où T: I '. –