Convierta una lista de objetos en una matriz de una de las propiedades del objeto

133

Digamos que tengo la siguiente clase:

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

y luego hago una lista de las siguientes clases ( List<ConfigItemType> MyList)

Ahora tengo un método con la siguiente firma:

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

¿Cómo puedo encajar MyListen el listGoesHereuso del valor ConfigItemType.Namecomo matriz de cadena de parámetros?

Estoy bastante seguro de que Linq puede hacer esto ... pero MyListno tiene un selectmétodo (que es lo que hubiera usado).

Vaccano
fuente

Respuestas:

278

Estás buscando

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

Dado que Selectes un método de Extensión, asegúrese de agregar ese espacio de nombres agregando un

using System.Linq

a su archivo, entonces aparecerá con Intellisense.

Vidrio roto
fuente
Eso es lo que yo también pensaba. Pero Select no aparece en el intellisense.
Vaccano
GAAAAAAA! Me faltaba el linq incluir!
Vaccano
1
necesita usar usando System.Data.Linq; luego siga la respuesta de BrokenGlass
Rami Shareef
1
¡Soy tonto! Ah bueno. Representante gratuito por ayudarme a resolverlo.
Vaccano
Fantástica solución. Quería acceder a la cadena "id" en mi lista de objetos. List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Funcionó
19

Estoy bastante seguro de que Linq puede hacer esto ... pero MyList no tiene un método de selección (que es lo que hubiera usado).

Sí, LINQ puede hacer esto. Es simplemente:

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

Lo más probable es que el problema sea que no tienes una referencia System.Coreo te falta una usingdirectiva System.Linq.

jason
fuente
6

Esto también debería funcionar:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Shadow Wizard es Ear for You
fuente
6

Para todos los que están atrapados con .NET 2.0, como yo, intente de la siguiente manera (aplicable al ejemplo en el OP):

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

donde ConfigItemList es su variable de lista.

Spyros
fuente
¡Gracias por publicar para la multitud .NET 2.0!
webworm