수색…
비고
그것을 전혀 사용하지 않습니까?
.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