121 votes

Convertir une liste d'objets en un tableau d'une des propriétés de l'objet.

Disons que j'ai la classe suivante :

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}

et ensuite je fais une liste des classes suivantes ( List<ConfigItemType> MyList )

J'ai maintenant une méthode avec la signature suivante :

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)

Comment puis-je m'adapter MyList dans le listGoesHere en utilisant la valeur dans ConfigItemType.Name comme le tableau de chaînes de caractères params ?

Je suis presque sûr que Linq peut faire cela.... mais MyList n'a pas de select (c'est ce que j'aurais utilisé).

252voto

BrokenGlass Points 91618

Vous êtes à la recherche de

MyList.Select(x=>x.Name).ToArray();

Desde Select est une méthode d'extension, assurez-vous d'ajouter cet espace de nom en ajoutant une balise

using System.Linq

à votre fichier - alors il apparaîtra avec Intellisense.

19voto

Jason Points 125291

Je suis presque sûr que Linq peut faire cela.... mais MyList n'a pas de méthode select (ce que j'aurais utilisé).

Oui, LINQ peut le faire. C'est simple :

MyList.Select(x => x.Name).ToArray();

Le problème le plus probable est que vous n'avez pas de référence pour System.Core ou il vous manque un using pour System.Linq .

6voto

Shadow Wizard Points 38568

Cela devrait également fonctionner :

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())

6voto

Spyros Points 11

Pour tous ceux qui, comme moi, sont bloqués avec .NET 2.0, essayez la méthode suivante (applicable à l'exemple de l'OP) :

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) { return ci.Name; }).ToArray();

donde ConfigItemList est votre variable de liste.

3voto

Rami Shareef Points 2901

Vous devez utiliser

using System.Data.Linq;

puis suivez la réponse de BrokenGlass

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