На самом деле вам не нужен новый метод расширения - для вас уже есть такой, который получит это:
controlCollection.OfType<TextBox>();
Метод OfType возвращает подмножество последовательности (IEnumerable<T>
) предоставленной последовательности. Если тип не конвертируем, он не учитывается. В отличие от большинства методов расширения LINQ, OfType
доступно для последовательностей, которые не являются строго типизированными:
Этот метод является одним из немногих стандартных методов операторов запросов, которые можно применять к коллекции непараметрического типа, такой как ArrayList. Это связано с тем, что OfType <(Of <(TResult>)>) расширяет тип IEnumerable.
Или, если вы хотите обернуть его в метод расширения, это, конечно, довольно просто:
public static IEnumerable<TextBox> TextBoxes(this ControlCollection controls)
{
return controls.OfType<TextBox>();
}