Sök…


Anmärkningar

Använd det alls?

Du kan hävda att avsikten med .NET-ramverket är att frågor inte har några biverkningar och att ForEach metoden per definition orsakar en bieffekt. Du kanske tycker att din kod är mer underhållbar och lättare att testa om du använder en vanlig foreach istället.

Ringa en metod på ett objekt i en 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());

Förlängningsmetod för IEnumerable

ForEach() definieras i klassen List<T> , men inte på IQueryable<T> eller IEnumerable<T> . Du har två val i dessa fall:

ToList först

Uppräkningen (eller frågan) kommer att utvärderas, kopiera resultaten till en ny lista eller ringa databasen. Metoden kallas sedan för varje artikel.

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

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

Den här metoden har uppenbar huvuddrag av minnesanvändning eftersom en mellanlista skapas.

Förlängningsmetod

Skriv en förlängningsmetod:

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

Använda sig av:

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

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

Varning: Ramverkets LINQ-metoder har utformats med avsikt att vara rena , vilket innebär att de inte ger biverkningar. ForEach metodens enda syfte är att producera biverkningar och avviker från de andra metoderna i denna aspekt. Du kan överväga att bara använda en vanlig foreach loop istället.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow