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