수색…


비고

그것을 전혀 사용하지 않습니까?

.NET 프레임 워크의 의도는 쿼리에 부작용이없고 ForEach 메서드가 정의 상 부작용을 일으킨다는 것입니다. 대신 일반 foreach 를 사용하면 코드를 유지 관리하기 쉽고 테스트하기가 쉽습니다.

목록에있는 객체에 대한 메소드 호출하기

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

IEnumerable의 확장 메서드

ForEach()List<T> 클래스에는 정의되지만 IQueryable<T> 또는 IEnumerable<T> 에는 정의되어 있지 않습니다. 이 경우 두 가지 선택 사항이 있습니다.

먼저 목록을 올리십시오.

열거 (또는 쿼리)가 평가되어 결과가 새 목록으로 복사되거나 데이터베이스를 호출합니다. 이 메소드는 각 항목에 대해 호출됩니다.

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

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

이 방법은 중간 목록이 생성 될 때 명백한 메모리 사용량 오버 헤드를 갖습니다.

확장 메소드

확장 메소드를 작성하십시오.

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

용도:

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

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

주의 : 프레임 워크의 LINQ 메서드는 순수함을 목적으로 디자인되었으므로 부작용이 발생하지 않습니다. ForEach 메서드의 유일한 목적은 부작용을 일으키는 것이며이 측면에서 다른 메서드에서 벗어납니다. 대신에 단순한 foreach 루프를 사용하는 것을 고려할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow