C# IEnumerable 및 yield - slog

delegate를 이용하면 selector를 구현할 수 있습니다. Enumerable의 LINQ 메소드를 보면, selectorFunc<TSource, TResult>형태로 사용했음을 알 수 있습니다. 예를들어,

        public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) {
            if (source == null) throw Error.ArgumentNull("source");
            if (selector == null) throw Error.ArgumentNull("selector");
            if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Select(selector);
            if (source is TSource[]) return new WhereSelectArrayIterator<TSource, TResult>((TSource[])source, null, selector);
            if (source is List<TSource>) return new WhereSelectListIterator<TSource, TResult>((List<TSource>)source, null, selector);
            return new WhereSelectEnumerableIterator<TSource, TResult>(source, null, selector);
        }

의 경우, selector를 제네릭과 같이 사용해서 Select메소드와 selector의 종속성을 제거합니다.

2개의 좋아요