9
votes

Pourquoi ne puis-je pas utiliser Linq sur ListView.SelectedItems?

J'essaie d'utiliser .Sélectionnez la méthode d'extension sur listview.selecteditems qui est sélectionnéeListViewItemCollection , mais . Sélectionnez ne s'affiche pas dans IntelliSense.

i peut utiliser foreach sur sélectionnéeListViewItemCollection , il doit donc avoir mis en œuvre iEnumerable . Je viens de vérifier MSDN, et c'est certainement. Alors pourquoi les méthodes d'extension LINQ ne peuvent-elles pas être utilisées?


0 commentaires

3 Réponses :


25
votes

La raison pour laquelle est-ce que SELECTELITEMS est saisi à une collection qui implémente iEnumerable. La méthode de l'extension SELECT est liée à iEnumerable code>. Par conséquent, cela ne fonctionnera pas avec la sélection de systémiques.

La solution de contournement consiste à utiliser la méthode d'extension .Cast pour l'obtenir sur le type approprié et doit apparaître P>

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


4 commentaires

@Joan, je ne suis pas sûr. Je crois que c'est l'article sous-jacent et non ListViewItem. Je ne trouve pas la réponse dans la documentation.


Merci Jared. Je voulais juste m'en assurer.


@JaredPar - Cela fonctionne-t-il réellement pour vous ou avez-vous besoin de MyListView.Selecteditems.Cast (). Sélectionnez (...)?


Merci! Je cherchais pourquoi une collection similaire ne fonctionnerait pas pour paniquer à jamais!



5
votes

Il implémente iEnumerable, pas iEnumerable - toutes les requêtes LINQ sont construites autour de l'interface générique iEnumerable pour permettre la sécurité du type et l'inférence générique - en particulier lorsque Traiter avec des types anonymes.

Vous pouvez utiliser ce qui suit: xxx


1 commentaires

@Lbushkin - Cela fonctionne-t-il réellement pour vous ou avez-vous besoin de MyListView.SelectedItems.Cast (). Sélectionnez (...)?



2
votes

Avez-vous "à l'aide de system.linq" en haut de votre dossier?

Est-ce une collection générique fortement typée? Sinon, vous devrez utiliser la méthode de l'extension CAST <>.


0 commentaires