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

Joa*_*nge 10 .net c# listview winforms

我试图做使用.Select扩展方法上ListView.SelectedItemsSelectedListViewItemCollection,但.Select在智能感知不显示.

我可以使用foreachSelectedListViewItemCollection,所以它必须实施IEnumerable.我刚刚在MSDN上查了一下,确实如此.那为什么不能在它上面使用LINQ扩展方法呢?

Jar*_*Par 25

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

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

ListView.SelectedItems.Cast<SomeType>.Select(...)
Run Code Online (Sandbox Code Playgroud)

  • @Joan,是的,你是对的,它会返回一个ListViewItem (2认同)

LBu*_*kin 6

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

您可以使用以下代码:

myListView.SelectedItems.Cast<ListViewItem>.Select( ... );
Run Code Online (Sandbox Code Playgroud)

  • @LBushkin - 这真的适合你还是你需要 myListView.SelectedItems.Cast&lt;ListViewItem&gt;().Select( ... )? (2认同)