Почему в RepeaterItemCollection нет методов расширения LINQ, несмотря на то, что он реализует IEnumerable?

Почему в RepeaterItemCollection нет методов расширения LINQ, несмотря на то, что он реализует IEnumerable?

Я использую Linq для объектов в другом месте того же класса. Однако, когда я пытаюсь сделать это с помощью RepeaterItemCollection, они недоступны. У меня создалось впечатление, что методы расширения LINQ доступны для классов, которые реализуют IEnumerable.

Что мне не хватает?

Ответ 1

Он реализует IEnumerable, но не IEnumerable<T>.

Это не значит, что вы не можете использовать его, хотя это часть того, что OfType и Cast, для создания общей последовательности из нерожденной:

var filtered = items.Cast<RepeaterItem>()
                    .Where(...) // Or whatever
                    .ToList();

В этом случае Cast более подходит, чем OfType, поскольку вы должны быть уверены, что он будет содержать только значения RepeaterItem. Обратите внимание, что Cast - это то, что используется, если вы укажете тип переменной диапазона в выражении запроса, так что это тоже будет работать:

var query = from RepeaterItem item in items
            where item.ItemType == ListItemType.SelectedItem
            select item.DataItem;

Ответ 2

Для работы с LINQ необходимо будет использовать общий IEnumerable<>, который нет.

Однако вы можете "перенести" его на тип, который вам нужен, с помощью метода расширения Cast<>.

Ответ 3

Согласно MSDN, он имеет следующие 4 метода расширения:

  • AsParallel()
  • AsQueryable()
  • Cast<TResult>()
  • OfType<TResult>()