No, IEnumerable
doesn’t have many extension methods on it: IEnumerable<T>
does. They are two separate interfaces, although IEnumerable<T>
extends IEnumerable
.
The normal LINQ ways of converting are to use the Cast<T>()
and OfType<T>()
extension methods which do extend the nongeneric interface:
IEnumerable<TextBox> textBoxes = Controls.OfType<TextBox>();
IEnumerable<Control> controls = Controls.Cast<Control>();
The difference between the two is that OfType
will just skip any items which aren’t of the required type; Cast
will throw an exception instead.
Once you’ve got references to the generic IEnumerable<T>
type, all the rest of the LINQ methods are available.