728x90
이터레이터 메서드 유형
- 시퀀스 내 개별 항목을 이용하여 작업을 수행하는 유형
- 시퀀스의 순회 방식에 변경을 주는 유형
익명 델리게이트 패턴
function
반환 값이 있는 함수를 전달하는 델리게이트
predicate
시퀀스 내의 항목이 조건에 부합하는지를 Boolean으로 반환하는 함수.
action
컬렉션 내의 개별 요소에 대해 수행할 작업을 전달하는 델리게이트.
예시
namespace System
{
public delegate bool Predicate<T>(T obj);
public delegate void Action<T>(T obj);
public delegate TResult Func<T, TResult>(T arg);
}
시퀀스에서 N번째 요소만 반환하는 코드
public static IEnumerable<T> EveryNthItem<T>(
IEnumerable<T> sequence, int period)
{
var count = 0;
foreach (T item in sequence)
if(++count % period == 0)
yield return item;
}
시퀀스에서 일부 항목만 뽑아내고 싶은 경우
Func <> 델리게이트를 이터레이션 패턴과 결합해서 사용한다.
public static IEnumerable<T> Select<T>(
IEnumerable<T> sequence, Func<T, T> method)
{
foreach(T element in sequence)
yield return method(element);
}
결론
function을 이용하면 시퀀스 개별 요소에 대해 적용할 다양한 작업을 구현할 수 있다.
action을 이용하면 시퀀스 일부 요소를 가져와서 수행할 작업을 쉽게 구현할 수 있다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 35 : 확장 메서드는 절대 오버로드하지 마라 (0) | 2021.12.10 |
---|---|
[Effective C#] 아이템 34 : 함수를 매개변수로 사용하여 결합도를 낮추라 (0) | 2021.12.09 |
[Effective C#] 아이템 31 : 시퀀스에 사용할 수 있는 조합 가능한 API를 작성해라 (0) | 2021.12.07 |
[Effective C#] 아이템 30: 루프보다 쿼리 구문이 낫다. (0) | 2021.12.06 |
[Effective C#] 아이템 29 : 시퀀스를 반환해야 하는 경우 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다. (0) | 2021.12.05 |