2011-10-14 21 views
6

Todavía soy nuevo en lambdas y me resulta difícil encontrar características específicas para él, pero ¿es posible ejecutar un método para cada objeto en una lista genérica? Similar a cómo funciona el ConvertAll, pero en lugar de convertir, realmente llama a un método.Método de ejecución para cada objeto en la lista genérica usando lambda

public class Mouse() 
{ 
    public void Squeak() 
    { 
    } 
} 

List<Mouse> mice = new List<Mouse>(); 

mice.Add(new Mouse()); 
mice.Add(new Mouse()); 

¿Cómo se llama el método Squeak para cada mouse?

mice.???(m => m.Squeak()); 

Respuesta

4

Puede hacerlo utilizando List<T>.ForEach() método (see MSDN):

mice.ForEach(m => m.Squeak()); 

PS: ¿Qué es la diversión que la respuesta está en la pregunta:

¿Cómo se llama al método Squeak para cada mouse?

3

No utilice . Parece un operador de secuencia. Los operadores de secuencia no deberían tener efectos secundarios. Estás usando algo que se parece a un operador de secuencia únicamente por sus efectos secundarios. En su lugar, sólo tiene que utilizar una llanura de edad bucle aburrido:

foreach(var mouse in mice) { 
    mouse.Squeak(); 
} 

Eric Lippert tiene un fabuloso artículo relacionado con este tema: foreach vs. ForEach.

Cuestiones relacionadas