2009-06-15 15 views
10

Tengo una lista de elementos de cierta clase. Esta clase contiene un campo.C# Extracto lista de campos de la lista de la clase

class Foo {public int i;} 
List<Foo> list; 

Me gustaría extraer el campo de todos los elementos de la lista en una nueva lista.

List<int> result = list.ExtractField (e => e.i); // imaginary 

Seguramente hay varias formas de hacerlo, pero no he encontrado una solución atractiva todavía. Pensé que linq podría ayudar, pero no estaba seguro de cómo exactamente.

Respuesta

18

Justo:

List<int> result = list.Select(e => e.i).ToList(); 

o

List<int> result = list.ConvertAll(e => e.i); 

Este último es más eficiente (ya que conoce el tamaño final para empezar), pero sólo funcionará para las listas y matrices en lugar de cualquier arbitraria secuencia.

+0

Maldita sea, dos veces ya esta mañana ;-p –

+0

Gracias Jon, Marc, eso fue rápido. :) – mafu

+0

¿Hay alguna buena razón para que LINQ no sea lo suficientemente inteligente como para saber en este escenario que el tamaño final va a ser 'list.Count'? –

Cuestiones relacionadas