Maison >développement back-end >C++ >Comment déterminer le paramètre de type d'une liste générique vide en C# ?
Comment déterminer les paramètres de type de la Liste générique
Lors de l'utilisation de la réflexion et de la manipulation de collections, il est crucial de déterminer les paramètres de type de la liste générique
Le code original avec le problème
Considérez le code suivant :
<code class="language-csharp">foreach (PropertyInfo pi in lbxObjects.SelectedItem.GetType().GetProperties()) { switch (pi.PropertyType.Name.ToLower()) { case "list`1": // 如果 List<T> 包含元素,则此方法有效。 Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null)); // 但如果值为 null,如何获取类型? } }</code>
Dans ce code, la méthode GetGenericType est utilisée pour obtenir le paramètre de type, mais elle nécessite que la liste contienne des éléments. Comment récupérer le type lorsque la liste est vide ?
Solution : Vérifier le type d'attribut
Pour résoudre ce problème, nous pouvons vérifier pi.PropertyType lui-même. S'il s'agit d'un type générique dont la définition correspond à List
Code modifié
<code class="language-csharp">Type type = pi.PropertyType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type itemType = type.GetGenericArguments()[0]; // 这将给出类型 }</code>
Gestion des interfaces hors liste
Pour une prise en charge plus générale de différents types implémentant IList
<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 注意此处使用 interfaceType // 对项目类型执行某些操作... } }</code>
Cette réponse révisée améliore la clarté et corrige une erreur mineure dans l'extrait de code final. Le paramètre type doit être extrait de interfaceType
et non de type
dans l'exemple IList<>
. > dans la vérification de la définition de type générique est également plus précise.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!