Testen der generischen Typinferenz in C# mit Typreflexion
In C# erfordert das Zuweisen eines Werts zu einer generischen Typvariablen eine Typinferenz zur Kompilierungszeit um den tatsächlichen Typ des Werts zu bestimmen. Dies kann zu Verwirrung führen, wenn versucht wird, zur Laufzeit zu testen, ob ein Objekt von einem generischen Typ ist.
Ein gängiger Ansatz, wie im Originalcode zu sehen ist, besteht darin, den Typ des Objekts mit der Definition des generischen Typs zu vergleichen . Dies funktioniert jedoch nicht für generische Instanzen mit bestimmten Typargumenten.
Um korrekt zu testen, ob ein Objekt eine Instanz eines generischen Typs ist, können Sie die IsGenericType-Eigenschaft von System.Type verwenden:
bool isGeneric = list.GetType().IsGenericType;
Dies gibt true zurück, wenn das Objekt eine Instanz eines generischen Typs ist, unabhängig von den Typargumenten.
Wenn Sie speziell testen müssen, ob das Objekt eine Instanz ist einer generischen Liste
bool isList = list.GetType().GetGenericTypeDefinition() == typeof(List<>);
Dies gibt true zurück, wenn das Objekt eine Instanz von List
Beachten Sie, dass beide Ansätze auf genaue Typäquivalenz prüfen. Wenn das Objekt von einem generischen Typ abgeleitet ist, geben diese Tests „false“ zurück.
Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit zuverlässig auf generische Typen in C# testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!