delegate를 이용하면 selector
를 구현할 수 있습니다. Enumerable의 LINQ 메소드를 보면, selector
를 Func<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
의 종속성을 제거합니다.