web-dev-qa-db-fra.com

Convertir la liste (d'objet) en liste (de chaîne)

Est-il possible de convertir un List(of Object) en un List(of String) en c # ou vb.net sans parcourir tous les éléments? (Dans les coulisses, l'itération est bonne - je veux juste un code concis)

Mise à jour: Le meilleur moyen est probablement de faire une nouvelle sélection

myList.Select(function(i) i.ToString()).ToList();

ou

myList.Select(i => i.ToString()).ToList();
67
Geoff Appleford

Pas possible sans itérer pour construire une nouvelle liste. Vous pouvez envelopper la liste dans un conteneur qui implémente IList.

Vous pouvez utiliser LINQ pour obtenir une version évaluée paresseuse de IEnumerable<string> d'une liste d'objets comme celle-ci:

var stringList = myList.OfType<string>();
74
Mehrdad Afshari

Cela fonctionne pour tous les types.

List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
34
Christer Eriksson

Si vous voulez plus de contrôle sur la manière dont la conversion a lieu, vous pouvez utiliser ConvertAll:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
23
Daniel Schaffer

Tu veux dire quelque chose comme ca?

List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();
9
ctacke

Non - si vous voulez convertir TOUS éléments d'une liste, vous devrez toucher TOUT éléments de cette liste d'une manière ou d'une autre.

Vous pouvez spécifier/écrire l'itération de différentes manières (foreach () ......, ou .ConvertAll () ou autre), mais à la fin, d'une manière ou d'une autre, un code va itérer sur chaque élément et le convertir.

Marc

3
marc_s

Pouvez-vous faire la conversion de chaîne pendant la construction de la liste (d'objet)? Ce serait le seul moyen d'éviter d'énumérer toute la liste après la création de la liste (d'objet).

1
Ben Robbins