Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Cast() 메서드 – 컬렉션 요소 형변환 완벽 가이드

C# Cast() 메서드란?

C#에서 컬렉션에 담긴 요소들을 특정 형식으로 변환(캐스팅)하려면 LINQ에서 제공하는 Cast() 메서드를 사용합니다. 이 메서드는 IEnumerable 계열의 비제네릭 컬렉션을 제네릭 형식으로 변환해 주기 때문에, object 타입으로 저장된 요소들을 원하는 타입으로 다룰 때 특히 유용합니다.

먼저 예제에 사용할 리스트를 살펴보겠습니다.

List<object> myList = new List<object> { "Mac", "Windows", "Linux", "Solaris" };

이 리스트는 모든 요소가 object 타입으로 선언되어 있습니다. 여기에 Cast<string>()을 적용하면 각 요소를 문자열로 변환할 수 있으며, 이어서 Select()와 Substring() 메서드를 조합하면 리스트의 모든 문자열에서 첫 두 글자만 추출할 수 있습니다.

IEnumerable<string> res = myList.AsQueryable().Cast<string>().Select(str => str.Substring(0, 2));

위 코드의 동작 순서는 다음과 같습니다.

  • AsQueryable(): 리스트를 IQueryable 형태로 변환하여 LINQ 질의를 지원합니다.
  • Cast<string>(): object 타입의 각 요소를 string 타입으로 캐스팅합니다.
  • Select(str => str.Substring(0, 2)): 각 문자열의 인덱스 0부터 2글자를 잘라 새로운 시퀀스를 생성합니다.

전체 예제 코드

아래는 키보드 관련 장비 이름이 담긴 리스트에서 각 단어의 앞 두 글자를 추출하는 완전한 예제입니다.

using System;
using System.Linq;
using System.Collections.Generic;
class Demo {
   static void Main() {
      List<object> list = new List<object> { "keyboard", "mouse", "joystick", "monitor" };
      // 각 문자열에서 앞 2글자 추출하기
      IEnumerable<string> res = list.AsQueryable().Cast<string>().Select(str => str.Substring(0, 2));
      foreach (string str in res)
      Console.WriteLine(str);
   }
}

실행 결과

ke
mo
jo
mo

정리 및 주의 사항

Cast() 메서드는 컬렉션 내 모든 요소가 대상 형식으로 변환 가능해야 합니다. 만약 리스트에 string이 아닌 다른 타입의 요소가 섞여 있다면 InvalidCastException이 발생합니다. 이런 경우에는 안전하게 필터링해 주는 OfType<T>() 메서드를 사용하는 것이 좋습니다. 또한 Cast()는 지연 실행(lazy evaluation) 방식으로 동작하기 때문에, foreach 문에서 실제로 열거될 때 변환이 수행된다는 점도 기억해 두면 좋습니다.