2017/11/28

C# yield return, 확장 메서드를 이용하여 Enumerable.Where 만들기

Enumerable.Where 와 같은 동작을 하는 Where2 를 만들어 보자.

public static class EnumerableEx
{
    public static IEnumerable<TSource> Where2<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
    {
        foreach (var item in source)
        {
            if (predicate(item))
                yield return item;
        }
    }
}

확장 메서드로 만들어서 IEnumerable.Where2 로 사용 가능하며
yield return 으로 지연 반환을 한다.


List<int> list = new List<int>();

list.Add(1);
list.Add(2);
list.Add(3);

var result = list.Where2(i => i > 1);

foreach (var item in result) { }//result 2, 3

list.Add(4);

foreach (var item in result) { }//result 2, 3, 4

댓글 없음:

댓글 쓰기

C# 문자열 포함 여부 확인하기.

ToUpper() 를 사용하면 불필요한 문자열을 생성하므로 좋은 방법은 아니다. string text = "This is an apple." ; string apple = "Apple." ; bool ...