J'utilise System.Reflection pour charger un type que je ne peux pas charger lors de la conception. J'ai besoin de tirer tous les contrôles dans une collection de ce type, cependant, la commande OfType ne semble pas aimer la syntaxe de réflexion. voici "proche de" ce que j'ai. Donc, ce code est faux, cela ne fonctionne pas, mais vous avez l'idée de ce que j'essaie de faire. Alors, y a-t-il un moyen d'utiliser la réflexion et d'obtenir tous les contrôles de ce type?.Net Utiliser la réflexion pour définir OfType
2
A
Répondre
3
OfType est une méthode générique, vous pouvez lui donner un type statique (par exemple OfType(Of String)
), pas un System.Type déterminé lors de l'exécution.
Vous pouvez faire quelque chose comme:
Dim CustomControlType as Type = LoadCustomType()
MyBaseControl.Controls.Cast(Of Control)().Where(Function(ctrl) ctrl.GetType().IsAssignableFrom(CustomControlType))
En utilisant Cast(Of Control)
pour convertir le ControlCollection
(IEnumerable
) à un IEnumerable<Control>
, qui obtient alors toutes les extensions lambda.
0
Essayez comme ceci:
Dim ControlType As Type = System.Reflection.Assembly.GetAssembly(_
GetType(MyAssembly.MyControl)) _
.GetType("MyAssembly.MyUnexposedControl")
Dim Matches as List(Of Control) = MyBaseControl.Controls.Where(Function(control) ControlType.GetType().IsAssignableFrom(control.GetType())
0
Pourquoi ne pas remplacer OfType avec un cas où vous testez le type?
Dim Matches as List(Of Control) = MyBaseControl.Controls.Where(Function(ctl) ctl.GetType() = ControlType)
EDIT: Darin était plus rapide ... et en fait sa solution est mieux car il gère les classes dérivées
0
Avez-vous essayé quelque chose comme ça?
Dim query = From i In MyBaseControl.Controls Where i.GetType is ControlType
Questions connexes
- 1. Utiliser le multi-thread pour accélérer la réflexion .NET
- 2. Utilisation de la réflexion pour définir la valeur d'un Int32
- 3. Utiliser la réflexion pour définir une valeur de propriété sur Nothing (Null)
- 4. Comment utiliser la réflexion .Net pour rechercher une propriété par nom en ignorant la casse?
- 5. Utiliser la réflexion pour trouver le nom d'un champ délégué
- 6. Réflexion pour la validation
- 7. Introspection .NET VS Réflexion
- 8. Utiliser la réflexion C# pour accéder à l'objet jusqu'à la pile
- 9. Est-il possible de définir la propriété privée par réflexion?
- 10. iPhone pathForResource: ofType: inDirectory: bug?
- 11. Utilisation de la réflexion pour définir une propriété d'une propriété d'un objet
- 12. Générer une méthode dynamique pour définir un champ d'une structure au lieu d'utiliser la réflexion
- 13. .NET/C# - Aide à la réflexion - Classes dans un assemblage
- 14. Utilisation GetProperties() avec BindingFlags.DeclaredOnly dans la réflexion .NET
- 15. Réflexion .net et le mot clé "params"
- 16. Correspondance des types utilisant la réflexion dans .NET
- 17. Types hérités Linq2SQL et requête OfType
- 18. Définir la résolution de l'écran dans .Net
- 19. « casting » avec la réflexion
- 20. Comment puis-je émuler l'héritage multiple et utiliser la réflexion pour optimiser ce code?
- 21. réflexion Python - Puis-je utiliser pour obtenir le code source d'une définition de la méthode
- 22. Comment utiliser la réflexion pour déterminer le type imbriqué (type d'élément) d'un tableau?
- 23. Comment utiliser la réflexion pour que les propriétés implémentent explicitement une interface?
- 24. Utilisez la réflexion pour définir la valeur d'un champ dans une structure qui fait partie d'un tableau de structures
- 25. ImageMagick Réflexion
- 26. réflexion VB pour chaque boucle
- 27. XAML pour l'effet de réflexion
- 28. Réflexion et compilation pour obtenir la valeur de MemberExpression
- 29. Comment faire pour supprimer "NSBundle peut ne pas répondre à '-pathForResource: ofType'" avertissement
- 30. Jouer autour de la réflexion
ce qui semble bon, cependant, « Où » ne semble pas apparaître dans System.Web.UI.ControlCollection –
@Russ Où est une méthode d'extension sur IEnumerable, même que OfType. Tant que vous avez l'espace de noms System.Linq inclus, vous aurez accès aux deux méthodes. –
ControlCollection n'implémente pas IEnumerable –