为什么RepeaterItemCollection实现了IEnumerable接口却没有LINQ扩展方法?

14

尽管RepeaterItemCollection实现了IEnumerable接口,为什么没有LINQ扩展方法?

我在同一个类中的其他地方使用Linq进行对象操作。然而,当我尝试对RepeaterItemCollection进行操作时,这些方法并不可用。我原本认为实现IEnumerable接口的类都可以使用LINQ扩展方法。

我错过了什么?


你在尝试执行此操作的文件中是否缺少“using”? - Gabe
3个回答

24

它实现了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;

2

为了与LINQ一起使用,它需要实现通用的 IEnumerable<> 接口,但它并没有这样做。

不过,您可以使用 Cast<> 扩展方法将其先转换为所需的类型。


1
是的,看起来这个类诞生于.NET 1.0,所以不支持泛型。 - AakashM

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接