2011-01-21 16 views
97

Dire che ho la seguente classe:Convertire un elenco di oggetti da una matrice di una delle proprietà dell'oggetto

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

e poi faccio un elenco delle seguenti classi (List<ConfigItemType> MyList)

Ora avere un metodo con la seguente firma:

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

Come posso adattare MyList dentro al listGoesHere utilizzando il valore in ConfigItemType.Name come array di string params?

Sono abbastanza sicuro che Linq possa farlo .... ma MyList non ha un metodo select su di esso (che è quello che avrei usato).

risposta

204

Siete alla ricerca di

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

Dal Select è un metodo di estensione assicurarsi di aggiungere che spazio dei nomi con l'aggiunta di un

using System.Linq

al file - allora verrà mostrato con Intellisense .

+0

Questo è quello che ho pensato anch'io. Ma Select non appare nell'intelligenza. – Vaccano

+0

+1 uguale al mio –

+0

GAAAAAAA! Mi mancava il linq include! – Vaccano

6

Questo dovrebbe funzionare anche:

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

io sono abbastanza sicuro che LINQ può fare questo .... ma MyList non avere un metodo di selezione su di esso (che è quello che avrei usato) .

Sì, LINQ può farlo. E 'semplicemente:

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

Molto probabilmente il problema è che o non hanno un riferimento a System.Core, o vi manca una direttiva using per System.Linq.

5

Per tutti coloro che sono bloccato con .NET 2.0, come me, provare nel modo seguente (applicabile l'esempio nel PO):

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

dove ConfigItemList è la vostra variabile di lista.

+0

Grazie per aver pubblicato per il pubblico di .NET 2.0! – webworm

Problemi correlati