58 votes

La plus succincte possible de convertir des ListBox.les éléments d'une liste générique

Je suis à l'aide de C# et de ciblage de l' .NET Framework 3.5. Je suis à la recherche d'un petit, concis et efficaces morceau de code à copier tous les éléments dans une zone de liste à un List<String> (Générique de la Liste).

Pour le moment j'ai quelque chose de similaire pour le code ci-dessous:

        List<String> myOtherList =  new List<String>();
        // Populate our colCriteria with the selected columns.

        foreach (String strCol in lbMyListBox.Items)
        {
            myOtherList.Add(strCol);
        }

Qui fonctionne, bien sûr, mais je ne peux pas aider mais avoir le sentiment qu'il doit y avoir une meilleure façon de le faire avec quelques-unes des nouvelles fonctionnalités de la langue. Je pensais à quelque chose comme la Liste.ConvertAll méthode, mais cela s'applique uniquement aux Génériques des Listes et pas de zone de liste.ObjectCollection collections.

106voto

AnthonyWJones Points 122520

Un peu de LINQ devrait le faire:-

 var myOtherList = lbMyListBox.Items.Cast<String>().ToList();

Bien sûr, vous pouvez modifier le paramètre de Type de la distribution de quel que soit le type que vous avez stockées dans la propriété Items.

27voto

adrianbanks Points 36858

La suite va le faire (à l'aide de Linq):

List<string> list = lbMyListBox.Items.OfType<string>().ToList();

Le OfType appel sera de s'assurer que seuls les éléments dans la zone de liste des éléments qui sont des chaînes de caractères sont utilisés.

À l'aide de Cast, si tous les éléments ne sont pas des chaînes, vous aurez une exception.

5voto

DavidGouge Points 2761

Comment à ce sujet:

List<string> myOtherList = (from l in lbMyListBox.Items.Cast<ListItem>() select l.Value).ToList();

2voto

Konamiman Points 20578

Ce sujet:

myOtherList.AddRange(lbMyListBox.Items);

MODIFIER sur la base des observations et DavidGouge de réponse:

myOtherList.AddRange(lbMyListBox.Items.Select(item => ((ListItem)item).Value));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X