.NET Framework
Dla każdego
Szukaj…
Uwagi
W ogóle go użyć?
Można argumentować, że intencją frameworka .NET jest to, że zapytania nie mają żadnych skutków ubocznych, a metoda ForEach
z definicji powoduje efekt uboczny. Kod może być łatwiejszy w utrzymaniu i łatwiejszy do przetestowania, jeśli zamiast tego użyjesz zwykłego foreach
.
Wywołanie metody na obiekcie na liście
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());
Metoda rozszerzenia dla IEnumerable
ForEach()
jest zdefiniowany w klasie List<T>
, ale nie w IQueryable<T>
lub IEnumerable<T>
. W tych przypadkach masz dwie możliwości:
Najpierw lista
Wyliczenie (lub zapytanie) zostanie ocenione, kopiując wyniki na nową listę lub wywołując bazę danych. Metoda jest następnie wywoływana dla każdego elementu.
IEnumerable<Customer> customers = new List<Customer>();
customers.ToList().ForEach(c => c.SendEmail());
Ta metoda ma oczywisty narzut wykorzystania pamięci, ponieważ tworzona jest lista pośrednia.
Metoda przedłużenia
Napisz metodę rozszerzenia:
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach(T item in enumeration)
{
action(item);
}
}
Posługiwać się:
IEnumerable<Customer> customers = new List<Customer>();
customers.ForEach(c => c.SendEmail());
Uwaga: metody LINQ w Framework zostały zaprojektowane z myślą o zachowaniu czystości , co oznacza, że nie powodują skutków ubocznych. Jedynym celem metody ForEach
jest wywołanie skutków ubocznych i różni się od innych metod w tym aspekcie. Zamiast tego możesz rozważyć użycie zwykłej pętli foreach
.