Test de l'inférence de type générique en C# avec réflexion de type
En C#, l'attribution d'une valeur à une variable de type générique nécessite une inférence de type au moment de la compilation pour déterminer le type réel de la valeur. Cela peut prêter à confusion lorsque vous essayez de tester si un objet est d'un type générique au moment de l'exécution.
Une approche courante, comme le montre le code d'origine, consiste à comparer le type de l'objet à la définition du type générique. . Cependant, cela ne fonctionne pas pour les instances génériques avec des arguments de type spécifiques.
Pour tester correctement si un objet est une instance d'un type générique, vous pouvez utiliser la propriété IsGenericType de System.Type :
bool isGeneric = list.GetType().IsGenericType;
Ceci renverra vrai si l'objet est une instance d'un type générique, quels que soient les arguments de type.
Si vous avez spécifiquement besoin de tester si l'objet est une instance d'un type générique Liste
bool isList = list.GetType().GetGenericTypeDefinition() == typeof(List<>);
Cela retournera vrai si l'objet est une instance de List
Notez que les deux approches vérifient l'équivalence de type exacte. Si l'objet est dérivé d'un type générique, ces tests renverront false.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!