我正在尝试使用.Select
ListView.SelectedItems
上的SelectedListViewItemCollection
扩展方法.Select
,但foreach
未显示在intellisense中。
我可以在SelectedListViewItemCollection
上使用IEnumerable
,因此必须已实施{{1}}。我刚刚在MSDN上查了一下,确实如此。那么为什么不能在它上面使用LINQ扩展方法呢?
答案 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;扩展方法。