C# 为什么可以';我不能在ListView.SelectedItems上使用LINQ吗?

C# 为什么可以';我不能在ListView.SelectedItems上使用LINQ吗?,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我正在尝试使用。在列表视图上选择扩展方法。SelectedItems是SelectedListViewItemCollection,但。Select不会在intellisense中显示 我可以在SelectedListViewItemCollection上使用foreach,因此它必须实现IEnumerable。我刚查过MSDN,它确实查过。那么为什么不能在其上使用LINQ扩展方法呢?原因是SelectedItems被键入到实现IEnumerable的集合中。选择扩展方法绑定到IEnumerab

我正在尝试使用
。在
列表视图上选择
扩展方法。SelectedItems
SelectedListViewItemCollection
,但
。Select
不会在intellisense中显示


我可以在
SelectedListViewItemCollection
上使用
foreach
,因此它必须实现
IEnumerable
。我刚查过MSDN,它确实查过。那么为什么不能在其上使用LINQ扩展方法呢?

原因是SelectedItems被键入到实现IEnumerable的集合中。选择扩展方法绑定到
IEnumerable
。因此,它不能与SelectedItems一起工作

解决方法是使用.Cast扩展方法将其转换为适当的类型,并且它应该显示出来

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

它实现IEnumerable,而不是
IEnumerable
——所有LINQ查询都是围绕泛型
IEnumerable
接口构建的,以允许类型安全和泛型推理,尤其是在处理匿名类型时

您可以改为使用以下选项:

myListView.SelectedItems.Cast<ListViewItem>.Select( ... );
myListView.SelectedItems.Cast.Select(…);
文件顶部是否有“using System.Linq”


它是强类型泛型集合吗?如果没有,您需要使用Cast扩展方法。

@Joan,我实际上不确定。我相信它是基础项,而不是ListViewItem。我在文档中找不到答案。谢谢Jared。我只是想确定一下。@JaredPar-这对你来说真的有用吗,还是你需要myListView.SelectedItems.Cast().Select(…)?谢谢!我一直在寻找,为什么一个类似的收集不会工作的怪物永远@LBushkin-这是否真的适用于您,或者您是否需要myListView.SelectedItems.Cast().Select(…)?