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).

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.


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.



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.


¡Gracias por publicar para la multitud .NET 2.0!
webworm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.