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 = .GetType();
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… :-(

No Comment

Comments are closed.