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(…)?