【问题标题】:Why can't I use LINQ on ListView.SelectedItems?为什么我不能在 ListView.SelectedItems 上使用 LINQ?
【发布时间】:2010-11-14 10:53:41
【问题描述】:

我正在尝试在ListView.SelectedItems 上使用.Select 扩展方法,即SelectedListViewItemCollection,但.Select 不会出现在智能感知中。

我可以在SelectedListViewItemCollection上使用foreach,所以它一定是实现了IEnumerable。我刚刚在 MSDN 上查看过,确实如此。那为什么不能在上面使用LINQ扩展方法呢?

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

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

    您可以改用以下内容:

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

    【讨论】:

    • @LBushkin - 这真的对你有用还是你需要 myListView.SelectedItems.Cast().Select( ... )?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      原因是 SelectedItems 被键入到实现 IEnumerable 的集合中。 Select 扩展方法绑定到IEnumerable&lt;T&gt;。因此它不适用于 SelectedItems。

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

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

      【讨论】:

      • @Joan,我实际上不确定。我相信它是基础项目而不是 ListViewItem。我在文档中找不到答案。
      • 谢谢贾里德。只是想确定一下。
      • @JaredPar - 这真的对你有用还是你需要 myListView.SelectedItems.Cast().Select( ... )?
      • 谢谢!我一直在寻找为什么一个类似的系列永远都不能用于该死!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多