@EnocNRoll - Ananda Gopal 's Antwort ist interessant, aber für den Fall, dass eine Instanz nicht vorher instanziiert wird oder Sie mit einer generischen Typdefinition überprüfen möchten, würde ich diese Methode vorschlagen:
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;
}
und verwenden Sie es wie:
var b = typeof(char[]).TypeIs(typeof(IList<>)); // true
Es gibt vier bedingte Fälle, in denen sowohl t
(noch zu testen) und d
sind generische Typen, und zwei Fälle werden abgedeckt durch t==d
die sind (1) weder t
ni d
ist eine generische Definition o (2) beide sind generische Definitionen . Die übrigen Fälle sind einer davon ist eine allgemeine Definition, nur wenn d
bereits eine allgemeine Definition ist, haben wir die Möglichkeit zu sagen a t
ist eine d
aber nicht umgekehrt.
Es sollte mit beliebigen Klassen oder Schnittstellen funktionieren, die Sie testen wollen, und gibt das zurück, was Sie testen, wenn Sie eine Instanz dieses Typs mit der is
Betreiber.