Zoeken…


Opmerkingen

Gebruik je het helemaal?

Je zou kunnen stellen dat de bedoeling van het .NET-framework is dat vragen geen bijwerkingen hebben en dat de ForEach methode per definitie een bijwerking veroorzaakt. Mogelijk vindt u uw code beter onderhoudbaar en gemakkelijker te testen als u in plaats daarvan een gewone foreach gebruikt.

Een methode aanroepen voor een object in een lijst

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());

Uitbreidingsmethode voor IEnumerable

ForEach() is gedefinieerd in de klasse List<T> , maar niet op IQueryable<T> of IEnumerable<T> . U hebt in die gevallen twee keuzes:

Eerst aan lijst

De opsomming (of query) wordt geëvalueerd, waarbij de resultaten naar een nieuwe lijst worden gekopieerd of de database wordt opgeroepen. De methode wordt vervolgens voor elk item aangeroepen.

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

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

Deze methode heeft overduidelijk geheugengebruik, omdat er een tussentijdse lijst wordt gemaakt.

Extensie methode

Schrijf een uitbreidingsmethode:

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

Gebruik:

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

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

Let op: De LINQ-methoden van het Framework zijn ontworpen met de bedoeling puur te zijn , wat betekent dat ze geen bijwerkingen veroorzaken. Het enige doel van de ForEach methode is het produceren van bijwerkingen en wijkt in dit opzicht af van de andere methoden. U kunt overwegen in plaats daarvan gewoon een gewone foreach lus te gebruiken.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow