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

133

Disons que j'ai la classe suivante:

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

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

Maintenant, j'ai une méthode avec la signature suivante:

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

Comment puis-je m'adapter MyListà l' listGoesHereutilisation de la valeur dansConfigItemType.Name comme tableau de chaînes de paramètres?

Je suis assez sûr que Linq peut le faire ... mais MyListn'a pas de selectméthode dessus (ce que j'aurais utilisé).

Vaccano
la source

Réponses:

278

Tu recherches

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

Puisqu'il Selects'agit d'une méthode d'extension, assurez-vous d'ajouter cet espace de noms en ajoutant un

using System.Linq

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

Verre brisé
la source
C'est ce à quoi j'ai pensé aussi. Mais Select n'apparaît pas dans l'intellisense.
Vaccano le
GAAAAAAA! Il me manquait le linq include!
Vaccano
1
vous devez utiliser en utilisant System.Data.Linq; puis suivez la réponse de BrokenGlass
Rami Shareef
1
Je suis stupide! Et bien. Représentant gratuit pour m'aider à comprendre.
Vaccano
solution fantastique. Je voulais accéder à la chaîne "id" dans ma liste d'objets. A travaillé parfaitement List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box
19

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

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

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

Le problème est probablement que vous n'avez pas de référence System.Coreou que vous n'avez pas de usingdirective pour System.Linq.

Jason
la source
6

Cela devrait également fonctionner:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Shadow Wizard est une oreille pour vous
la source
6

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

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

ConfigItemList est votre variable de liste.

Spyros
la source
Merci d'avoir posté pour la foule .NET 2.0!
webworm