Buscar..


Observaciones

Utilizarlo en absoluto?

Podría argumentar que la intención de .NET framework es que las consultas no tengan ningún efecto secundario y que el método ForEach esté, por definición, causando un efecto secundario. Es posible que su código sea más fácil de mantener y más fácil de probar si, en su lugar, utiliza un simple foreach .

Llamar a un método en un objeto en una lista

public class Customer {
   public void SendEmail()
   {
       // Sending email code here
   }
}

List<Customer> customers = new List<Customer>();

customers.Add(new Customer());
customers.Add(new Customer());

customers.ForEach(c => c.SendEmail());

Método de extensión para IEnumerable

ForEach() se define en la clase List<T> , pero no en IQueryable<T> o IEnumerable<T> . Tienes dos opciones en esos casos:

ToList primero

Se evaluará la enumeración (o consulta), copiando los resultados en una nueva lista o llamando a la base de datos. El método se llama a continuación en cada elemento.

IEnumerable<Customer> customers = new List<Customer>();

customers.ToList().ForEach(c => c.SendEmail());

Este método tiene una sobrecarga de uso de memoria evidente, ya que se crea una lista intermedia.

Método de extensión

Escribe un método de extensión:

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach(T item in enumeration)
    {
        action(item);
    }
}

Utilizar:

IEnumerable<Customer> customers = new List<Customer>();

customers.ForEach(c => c.SendEmail());

Precaución: los métodos LINQ de Framework se han diseñado con la intención de ser puros , lo que significa que no producen efectos secundarios. El único propósito del método ForEach es producir efectos secundarios, y se desvía de los otros métodos en este aspecto. Puede considerar simplemente usar un bucle foreach simple en su lugar.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow