2011-01-21 9 views
97

Decir que tengo la clase siguiente:Convertir una lista de objetos en una matriz de una de las propiedades del objeto

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 tener un método con la siguiente firma:

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

¿Cómo puede caber que MyList en la listGoesHere utilizando el valor en ConfigItemType.Name como la matriz de cadenas de params?

Estoy bastante seguro de que Linq puede hacer esto ... pero MyList no tiene un método select (que es lo que habría usado).

Respuesta

204

Usted está buscando

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

Desde Select es un método de extensión, asegúrese de añadir ese espacio de nombres mediante la adición de un

using System.Linq

a su archivo - a continuación, se mostrará con Intellisense .

+0

Eso es lo que pensé también. Pero Select no aparece en el intellisense. – Vaccano

+0

+1 igual que el mío –

+0

GAAAAAAA! ¡Me faltaba el linq incluido! – Vaccano

6

Esto también debería funcionar:

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

Estoy bastante seguro de que LINQ puede hacer esto .... pero Mi lista no tiene un método de selección en el mismo (que es lo que habría utilizado) .

Sí, LINQ puede hacerlo. Es simplemente:

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

más probable es que el problema es que o bien no tiene una referencia a System.Core, o se echa en falta una directiva para usingSystem.Linq.

5

Para todos los que se ha quedado atascado con .NET 2.0, como yo, trata de la siguiente manera (aplicable al ejemplo de la OP):

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

donde ConfigItemList es la variable de lista.

+0

¡Gracias por publicar para la multitud de .NET 2.0! – webworm

Cuestiones relacionadas