Test du type générique d'un objet en C#
En C#, il est essentiel de vérifier le type générique d'un objet pour s'assurer du bon manipulation et compatibilité dans votre code. Une approche courante consiste à utiliser la méthode GetType() pour récupérer le type d'un objet et le comparer à une définition de type générique connue. Cependant, cette approche peut entraîner des erreurs lors de la tentative de détermination du type générique.
Le problème d'équivalence de type
Le code fourni :
public bool Test() { List<int> list = new List<int>(); return list.GetType() == typeof(List<>); }
peut sembler logique, mais il retournera toujours false car l'opérateur == compare l'équivalence de type. Le type générique List<> représente une liste générique qui peut stocker n'importe quel type, pas seulement des entiers. Par conséquent, le type de list sera plus spécifique que List<>, ce qui entraînera une comparaison d'inégalités.
Solutions pour tester les types génériques
Pour tester avec précision si un objet est d'un type générique, utilisez ce qui suit approches :
Vérifier une instance générique :
Pour déterminer si un objet est une instance d'un type générique, utilisez la propriété IsGenericType :
return list.GetType().IsGenericType;
Cela retournera vrai si list est une instance de n'importe quel générique class.
Vérifier le type générique spécifique :
Pour vérifier si un objet est une liste générique spécifique (List<>), utilisez la méthode GetGenericTypeDefinition() :
return list.GetType().GetGenericTypeDefinition() == typeof(List<>);
Cela permettra renvoie true si list est une instance de List<> mais pas de types dérivés.
N'oubliez pas que ces vérifications établissent une équivalence de type exacte. Si un objet est une instance d'un type générique dérivé (par exemple, List
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!