为什么在RepeaterItemCollection上没有LINQ扩展方法,尽管它实现了IEnumerable?

时间:2010-07-06 16:49:32

标签: c# repeater linq-to-objects

为什么在RepeaterItemCollection上没有LINQ扩展方法,尽管它实现了IEnumerable?

我正在将Linq用于同一类中其他地方的对象。但是,当我尝试使用RepeaterItemCollection时,它们不可用。我的印象是LINQ扩展方法可用于实现IEnumerable的类。

我错过了什么?

3 个答案:

答案 0 :(得分:21)

它实现IEnumerable,但不是IEnumerable<T>

这并不意味着你不能使用它 - 这是OfTypeCast的一部分,从非通用序列构建一个通用序列:

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

在这种情况下,CastOfType更合适,因为您应确信它只包含RepeaterItem个值。请注意,Cast是在查询表达式中声明范围变量的类型时使用的内容,因此这也会起作用:

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

答案 1 :(得分:2)

它需要实现通用IEnumerable<>以使用LINQ,但实际上并非如此。

但是,您可以首先使用Cast<>扩展方法将其“转换”为所需类型。

答案 2 :(得分:1)

根据MSDN,它有以下4种扩展方法:

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