더북(TheBook)

Note ≡ Cast<T>( ) 메서드로 List<자식>을 List<부모>로 변환

List<T> 형태의 컬렉션 데이터를 부모 클래스 형태로 변경해야 할 경우가 있습니다. 많은 방법이 있겠지만 LINQ에서 제공하는 ConvertAll()Cast<T>() 메서드를 사용하면 쉽게 변경할 수 있습니다. 다음 코드를 살펴보세요. 참고로 다음 코드는 내용을 몰라도 전혀 문제가 되지 않습니다.

 

Cast<T>( ) 메서드 사용: ListOfChildToListOfParent.cs

using System;
using System.Collections.Generic;
using System.Linq;

namespace ListOfChildToListOfParent
{
    interface A { }

    class B : A { }

    class ListOfChildToListOfParent
    {
        static void Main()
        {
            List<A> convertAll = (new List<B>()).ConvertAll(x => (A)x); //①
            List<A> astoff = (new List<B>()).Cast<A>().ToList();        //②

            Console.WriteLine(convertAll);
            Console.WriteLine(astoff);
        }
    }
}

실행 결과

System.Collections.Generic.List`1[ListOfChildToListOfParent.A]
System.Collections.Generic.List`1[ListOfChildToListOfParent.A]

이나 처럼 자식 클래스의 컬렉션 인스턴스를 부모 클래스의 컬렉션 인스턴스에 대입할 때는 ConvertAll() 또는 Cast<T>() 메서드를 사용할 수 있습니다. 현업에서 프로그램을 작성하다 보면 특정 인터페이스 또는 부모 클래스의 자식 클래스 값을 통합해서 사용할 때 이 두 메서드가 유용하지만, 지금은 ‘이러한 메서드도 있구나’ 정도로 가볍게 살펴보고 넘어갑니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.