为什么我不能在ListView.SelectedItems上使用LINQ?

时间:2009-07-27 18:11:32

标签: c# .net winforms listview

我正在尝试使用.Select ListView.SelectedItems上的SelectedListViewItemCollection扩展方法.Select,但foreach未显示在intellisense中。

我可以在SelectedListViewItemCollection上使用IEnumerable,因此必须已实施{{1}}。我刚刚在MSDN上查了一下,确实如此。那么为什么不能在它上面使用LINQ扩展方法呢?

3 个答案:

答案 0 :(得分:24)

原因是SelectedItems被输入到实现IEnumerable的集合中。 Select扩展方法绑定到IEnumerable<T>。因此它不适用于SelectedItems。

解决方法是使用.Cast扩展方法将其设置为适当的类型,它应该显示

ListView.SelectedItems.Cast<SomeType>.Select(...)

答案 1 :(得分:6)

它实现了IEnumerable,而不是IEnumerable<T> - 所有LINQ查询都是围绕通用IEnumerable<T>接口构建的,以允许类型安全和通用推理 - 特别是在处理匿名类型时。

您可以改用以下内容:

myListView.SelectedItems.Cast<ListViewItem>.Select( ... );

答案 2 :(得分:2)

您是否在文件顶部“使用System.Linq”?

它是一个强类型的通用集合吗?如果没有,您将需要使用Cast&lt;&gt;扩展方法。