为什么在RepeaterItemCollection上没有LINQ扩展方法,尽管它实现了IEnumerable?
我正在将Linq用于同一类中其他地方的对象。但是,当我尝试使用RepeaterItemCollection时,它们不可用。我的印象是LINQ扩展方法可用于实现IEnumerable的类。
我错过了什么?
答案 0 :(得分:21)
它实现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;
答案 1 :(得分:2)
它需要实现通用IEnumerable<>
以使用LINQ,但实际上并非如此。
但是,您可以首先使用Cast<>
扩展方法将其“转换”为所需类型。
答案 2 :(得分:1)
根据MSDN,它有以下4种扩展方法:
AsParallel()
AsQueryable()
Cast<TResult>()
OfType<TResult>()