Home Full Site
Enumerable 확장 메서드의 예제

System.Linq.Enumerable 클래스는 LINQ 쿼리에서 사용되는 많은 확장 메서드들을 포함하는 클래스이다. 한 예를 들어, Enumerable 클래스는 다음과 같은 Where() 확장메서드를 포함하고 있다. 첫번째 파라미터는 이 메서드가 IEnumerable<T> 인터페이스를 지원하는 모든 Type에 사용된다는 것을 의미한다. 두번째 파라미터는 Func 라는 Delegate를 받아들인다는 것을 의미하는데, 보통 여기에는 LINQ 쿼리를 람다식 (Lambda Expression)으로 표현하여 넣게 된다.

예제

// LINQ에 정의된 Where 확장메서드

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
)


아래는 Where() 확장메서드를 사용하는 예제이다. Where() 확장메서드의 첫번째 파라미터에 해당되는 this IEnumerable<T>은 IEnumerable<T>를 갖는 클래스에서 사용된다는 의미인데, 변수 list 객체가 IEnumerable을 구현한 문자열 리스트이므로 list.Where()처럼 사용할 수 있다. 아래 예에서 Where() 안의 파라미터는 람다식 표현으로 Element중 A로 시작되는 문자열들만 선별하는 것을 의미한다.

예제

// Where 확장메서드를 List<T>에서 사용

List<string> list = new List<string> { "Apple", "Grape", "Banana" };
IEnumerable<string> q = list.Where(p => p.StartsWith("A"));


또 다른 예로서 아래 예제는 Where() 확장 메서드를 정수 리스트에 적용하여 3으로 나누어 떨어지는 데이타만 출력해 본 것이다. Where()의 리턴 값은 IEnumerable<int>인데, 이를 동적배열(List)로 변경하기 위해 ToList() 메서드를 사용하였다.

예제

static void Main(string[] args)
{
   List<int> nums = new List<int> { 55, 44, 33, 66, 11 };

   // Where 확장 메서드 정수 리스트에 사용
   var v = nums.Where(p => p % 3 == 0);

   // IEnumerable<int> 결과를 정수리스트로 변환
   List<int> arr = v.ToList<int>();

   // 리스트 출력
   arr.ForEach(n => Console.WriteLine(n));
}



C# 동영상 강의 : C# 확장메서드 (Extension Method)
[레벨] 중급     
[C# 중급] C# 확장메서드 (Extension Method)의 개념을 설명하고, 구조체, 클래스, 인터페이스 각각에서 확장메서드를 사용하는 예제를 소개합니다.

© csharpstudy.com