Commencez par vous assurer que vous avez using System.Linq;
en haut du fichier.
Si vous avez une collection qui implémente IEnumerable
mais pas IEnumerable<T>
, mais vous savez tous les objets sont d'un type donné (par exemple Control
), vous pouvez utiliser la méthode d'extension Cast<T>
LINQ:
foreach (var control in Controls.Cast<Control>()
.Where(i => i.GetType() == typeof(TextBox))) {...}
Toutefois, compte tenu de votre clause Where
, il pourrait être plus prudent, dans ce cas, d'utiliser la méthode OfType<T>
, qui retourne seulement ceux d'un type donné (Cast<T>
lève une exception si quelque chose est erroné):
foreach (var control in Controls.OfType<TextBox>()) {...}
La légère différence entre ceci et votre version est que ce qui précède retournera des sous-classes de TextBox
, où-comme votre version GetType() == typeof(TextBox)
ne le fera pas.
En fait, la plupart des méthodes d'extension LINQ ne sont définis que pour IEnumerable<T>
/IQueryable<T>
, pas IEnumerable
/IQueryable
.
Merci. Je cherchais à utiliser 'where' dans un exemple, pour différencier OfType, pour obtenir uniquement les types exacts, pas tous les types assignables. Le Cast fonctionne bien. –
ProfK