Ich möchte einen Test durchführen, wenn ein Objekt von einem generischen Typ ist. Ich habe folgendes ohne Erfolg versucht:
public bool Test()
{
List<int> list = new List<int>();
return list.GetType() == typeof(List<>);
}
Was mache ich falsch und wie führe ich diesen Test durch?
Ich gehe davon aus, dass Sie nicht nur wissen möchten, ob der Typ generisch ist, sondern ob ein Objekt eine Instanz eines bestimmten generischen Typs ist, ohne die Typargumente zu kennen.
Es ist leider nicht besonders einfach. Es ist nicht schlecht, wenn der generische Typ eine Klasse ist (wie in diesem Fall), aber es ist schwieriger für Schnittstellen. Hier ist der Code für eine Klasse:
BEARBEITEN: Wie in den Kommentaren angegeben, funktioniert dies möglicherweise für Schnittstellen:
Ich habe den Verdacht, dass es einige unangenehme Randfälle gibt, aber ich kann keinen finden, für den es momentan fehlschlägt.
quelle
List<T>
in irgendeiner Form getroffen haben . Wenn Sie Schnittstellen einschließen, ist das wirklich schwierig.IsInstanceOfGenericType
durch einen Aufruf vonIsAssignableFrom
anstelle des Gleichheitsoperators (==
) ersetzen ?Sie können kürzeren Code mit dynamischer Verwendung verwenden, obwohl dies langsamer sein kann als reine Reflexion:
quelle
Dies sind meine beiden bevorzugten Erweiterungsmethoden, die die meisten Randfälle der generischen Typprüfung abdecken:
Arbeitet mit:
Hat eine Überladung, die den spezifischen generischen Typ "out" macht, wenn er true zurückgibt (siehe Unit-Test für Beispiele):
Hier ist ein Test, um die (grundlegende) Funktionalität zu demonstrieren:
quelle
quelle