.NET Framework
Para cada
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.