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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow