Je le code suivant:Comment savoir si un objet est de <type> ou un decendant de <type>
foreach (var control in this.Controls)
{
}
Je veux faire quelque chose comme control.Hide()
là-dedans. Mais les éléments de la collection this.Controls
ne sont pas de type Control
(ils sont Object
).
Je n'arrive pas à me souvenir de la façon sécuritaire de lancer cette fonction pour appeler hide si elle est vraiment de type Control
et ne rien faire d'autre. (Je suis un programmeur delphi transplanté et je continue à penser quelque chose comme control is Control
.)
Je n'ai pas fait cela parce que resharper pensait que la seule autre option pour cette collection était 'Object'.J'ai supposé (comme je l'ai indiqué dans ma question) que les valeurs retournées par la collection étaient de type 'Object' et pourraient être de type différent de classes. – Vaccano
Dans ce cas, R # est faux et Anthong Pegram a raison. Tous les objets de la collection Controls seront de type Control, il est donc sûr de déclarer la variable d'itération comme 'Control'. Les autres solutions compliquent à l'extrême quelque chose de vraiment simple. – EMP
La ControlCollection est pré-générique en C# et n'est donc pas fortement typée, c'est pourquoi l'inférence de type sur var tire l'objet au lieu de Control. Cependant, vous devriez être sûr de dire Contrôle de contrôle plutôt que contrôle de var puisque la collection ne contient réellement que des contrôles. Tout comme si vous aviez un ArrayList contenant uniquement des ints, vous pourriez dire (int i dans arrayList) même si techniquement il stocke des éléments comme des objets. –