.NET Framework
Für jeden
Suche…
Bemerkungen
Verwenden Sie es überhaupt?
Sie könnten argumentieren, dass die Absicht des .NET-Frameworks ist, dass Abfragen keine Nebenwirkungen haben und die ForEach
Methode definitionsgemäß einen Nebeneffekt verursacht. Wenn Sie stattdessen ein einfaches foreach
verwenden, ist der Code möglicherweise wartungsfreundlicher und leichter zu testen.
Aufrufen einer Methode für ein Objekt in einer Liste
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());
Erweiterungsmethode für IEnumerable
ForEach()
ist in der List<T>
-Klasse definiert, jedoch nicht in IQueryable<T>
oder IEnumerable<T>
. In diesen Fällen haben Sie zwei Möglichkeiten:
ToList zuerst
Die Aufzählung (oder Abfrage) wird ausgewertet, die Ergebnisse in eine neue Liste kopiert oder die Datenbank aufgerufen. Die Methode wird dann für jedes Element aufgerufen.
IEnumerable<Customer> customers = new List<Customer>();
customers.ToList().ForEach(c => c.SendEmail());
Diese Methode hat einen offensichtlichen Overhead für die Speicherauslastung, da eine Zwischenliste erstellt wird.
Erweiterungsmethode
Schreibe eine Erweiterungsmethode:
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach(T item in enumeration)
{
action(item);
}
}
Benutzen:
IEnumerable<Customer> customers = new List<Customer>();
customers.ForEach(c => c.SendEmail());
Achtung: Die LINQ-Methoden des Frameworks wurden mit der Absicht entwickelt, rein zu sein , was bedeutet, dass sie keine Nebenwirkungen erzeugen. Die ForEach
Methode hat nur den Zweck, Nebenwirkungen zu erzeugen, und weicht in diesem Aspekt von den anderen Methoden ab. Sie können auch nur eine einfache foreach
Schleife verwenden.