尽管RepeaterItemCollection实现了IEnumerable接口,为什么没有LINQ扩展方法?
我在同一个类中的其他地方使用Linq进行对象操作。然而,当我尝试对RepeaterItemCollection进行操作时,这些方法并不可用。我原本认为实现IEnumerable接口的类都可以使用LINQ扩展方法。
我错过了什么?
尽管RepeaterItemCollection实现了IEnumerable接口,为什么没有LINQ扩展方法?
我在同一个类中的其他地方使用Linq进行对象操作。然而,当我尝试对RepeaterItemCollection进行操作时,这些方法并不可用。我原本认为实现IEnumerable接口的类都可以使用LINQ扩展方法。
我错过了什么?
它实现了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;
为了与LINQ一起使用,它需要实现通用的 IEnumerable<>
接口,但它并没有这样做。
不过,您可以使用 Cast<>
扩展方法将其先转换为所需的类型。