252 votes

Comment déterminer si un type implémente un type d’interface générique spécifique

Supposons que les définitions de types suivants :

Comment puis-je savoir si le type implémente l’interface générique si seulement le type mutilé est disponible ?

431voto

sduplooy Points 3630

À l’aide de la réponse de précis, il peut également être fait avec la requête LINQ suivante :

35voto

Jon Skeet Points 692016

Vous devez aller jusqu'à travers l'arbre d'héritage et de trouver toutes les interfaces pour chaque classe dans l'arbre, et de comparer typeof(IBar<>) avec le résultat de l'appel d' Type.GetGenericTypeDefinition si l'interface est générique. C'est un peu douloureux, certes.

Voir cette réponse et ces pour plus d'infos et le code.

26voto

TcKs Points 13249
public interface IFoo<T> : IBar<T> {}
public class Foo : IFoo<Foo> {}

var implementedInterfaces = typeof( Foo ).GetInterfaces();
foreach( var interfaceType in implementedInterfaces ) {
    if ( false == interfaceType.IsGeneric ) { continue; }
    var genericType = interfaceType.GetGenericTypeDefinition();
    if ( genericType == typeof( IFoo<> ) ) {
        // do something !
        break;
    }
}

8voto

GenericProgrammer Points 131

Comme une extension de méthode helper

exemple d’utilisation :

5voto

Ben Foster Points 11699

J’utilise une version légèrement simplifiée de la méthode d’extension @GenericProgrammers :

Utilisation :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X