web-dev-qa-db-fra.com

Le moyen le plus succinct de convertir ListBox.items en liste générique

J'utilise C # et je cible le .NET Framework 3.5. Je cherche un petit morceau de code succinct et efficace pour copier tous les éléments dans un ListBox vers un List<String> (Générique Liste ).

Pour le moment, j'ai quelque chose de similaire au 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);
        }

Ce qui fonctionne, bien sûr, mais je ne peux pas m'empêcher d'avoir l'impression qu'il doit y avoir une meilleure façon de le faire avec certaines des nouvelles fonctionnalités du langage. Je pensais à quelque chose comme la méthode List.ConvertAll mais cela ne s'applique qu'aux listes génériques et non aux collections ListBox.ObjectCollection .

57
jamiei

Un peu de LINQ devrait le faire: -

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

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

105
AnthonyWJones

Ce qui suit le fera (en utilisant Linq):

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

L'appel OfType garantit que seuls les éléments des éléments de la zone de liste qui sont des chaînes sont utilisés.

En utilisant Cast , si l'un des éléments n'est pas une chaîne, vous obtiendrez une exception.

27
adrianbanks

Que dis-tu de ça:

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

Qu'en est-il de:

myOtherList.AddRange(lbMyListBox.Items);

EDIT basé sur les commentaires et la réponse de DavidGouge:

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

Vous n'en avez pas besoin de plus. Vous obtenez la liste de toutes les valeurs de Listbox

private static List<string> GetAllElements(ListBox chkList)
        {
            return chkList.Items.Cast<ListItem>().Select(x => x.Value).ToList<string>();
        }
1
iruisoto