How-To: Generischen Basistyp finden
Um per Reflection mal eben schnell darauf zu prüfen, ob ein Element beispielsweise ein Array oder eine ArrayList ist, kann man folgenden Code verwenden:
Type t =
if(t.IsArray() || t is typeof(ArrayList))
{
// …
}
Nur, was wenn man das auch bei generischen Sachen überprüfen möchte?
Diese Prüfung schlägt fehl:
if(t is typeof(List<>)) { … }
Die auch:
if(t.IsAssignableFrom(typeof(List<>))) { … }
So klappt es: Erst den Basistyp der generischen Klasse ermitteln, und dann gegen den prüfen:
Type baseType = t.GetGenericTypeDefinition();
if(t.IsAssignableFrom(baseType)) { … }
Ist sehr prima in der Doku versteckt…
