Причина, по которой коллекции типа ControlCollection
не работают с LINQ, заключается в том, что они не строго типизированы. Без типа элемента LINQ не может создавать строго типизированные методы. Если вы знаете тип, вы можете использовать метод Cast
для создания строго типизированного перечисления и, следовательно, использовать его с LINQ. Например
ControlCollection col = ...
var query = col.Cast<Control>().Where(x => ...);
Что касается того, Microsoft когда-нибудь сделает так, чтобы они реализовали IEnumerable<T>
по умолчанию. Мое предположение не здесь. Причина в том, что это является серьезным изменением и может привести к ожидаемому поведению в коде. Даже простая реализация IEnumerable<Control>
для ControlCollection
приведет к изменениям разрешения перегрузки, которые могут, и почти наверняка, нарушат работу пользовательских приложений.