@EnocNRoll - La réponse d'Ananda Gopal est intéressante, mais en cas d'instance non instanciée au préalable ou si vous souhaitez vérifier avec une définition de type générique, je suggérerais cette méthode:
public static bool TypeIs(this Type x, Type d) {
if(null==d) {
return false;
}
for(var c = x; null!=c; c=c.BaseType) {
var a = c.GetInterfaces();
for(var i = a.Length; i-->=0;) {
var t = i<0 ? c : a[i];
if(t==d||t.IsGenericType&&t.GetGenericTypeDefinition()==d) {
return true;
}
}
}
return false;
}
et l'utiliser comme suit:
var b = typeof(char[]).TypeIs(typeof(IList<>)); // true
Il y a quatre cas conditionnels où à la fois t
(à tester) et d
sont des types génériques et deux cas sont couverts par t==d
qui sont (1)ni t
ni d
n'est une définition générique ou (2) les deux sont des définitions génériques. Les autres cas sont l'un d'entre eux est une définition générique, seulement lorsque d
est déjà une définition générique nous avons la possibilité de dire un t
est un d
mais pas l'inverse.
Cela devrait fonctionner avec des classes ou interfaces arbitraires que vous souhaitez tester, et renvoie comme si vous testiez une instance de ce type avec l'opérateur is
.