Будет ли Microsoft когда-либо делать все коллекции пригодными для использования LINQ?
Я уже некоторое время использую LINQ (и получаю от этого удовольствие), но мне кажется, что я столкнулся с быстрым ударом, когда сталкиваюсь со специализированными коллекциями.NET (DataRowCollection, ControlCollection). Есть ли способ использовать LINQ с этими специализированными элементами управления, и если нет, как вы думаете, Microsoft решит эту проблему в следующем выпуске платформы? Или нам осталось перебрать эти не-LINQ-пути, или сами вытащить элементы из коллекции в коллекции с поддержкой LINQ?
3 ответа
Причина, почему коллекции нравятся ControlCollection
не работают с LINQ в том, что они не сильно типизированы. Без типа элемента LINQ не может создавать строго типизированные методы. Пока вы знаете тип, который вы можете использовать Cast
метод для создания строго типизированного перечисления и, следовательно, для использования с LINQ. Например
ControlCollection col = ...
var query = col.Cast<Control>().Where(x => ...);
Что касается того, будет ли Microsoft когда-либо реализовывать IEnumerable<T>
по умолчанию. Мое предположение не здесь. Причина в том, что это является серьезным изменением и может привести к ожидаемому поведению в коде. Даже просто внедряя IEnumerable<Control>
за ControlCollection
приведет к изменениям разрешения перегрузки, которые могут, и почти наверняка, нарушат работу пользовательских приложений.
Вы должны быть в состоянии сделать что-то вроде этого:
myDataRowCollection.Cast<DataRow>().Where.....
и использовать Linq таким образом. Если вы знаете, что представляют собой объекты в коллекции, вы сможете это использовать.
Причина этого: коллекции, которые не реализуют IEnumerable<T>
или IQueryable, не может быть повторен в LINQ