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

C# OfType() 메서드 완벽 가이드: 컬렉션을 요소 타입별로 필터링하는 방법

OfType() 메서드는 컬렉션의 각 요소를 지정된 타입을 기준으로 필터링할 때 사용하는 LINQ 확장 메서드입니다. 특히 IList, ArrayList처럼 다양한 타입의 요소가 섞여 있는 비제네릭 컬렉션에서 원하는 타입의 값만 깔끔하게 추출할 수 있어 매우 유용합니다.

OfType() 메서드란?

OfType<T>()는 컬렉션을 순회하면서 T 타입과 호환되는 요소만 골라내어 새로운 시퀀스로 반환합니다. 타입이 일치하지 않는 요소는 예외를 발생시키지 않고 자동으로 제외되기 때문에, 혼합 타입 컬렉션을 안전하게 처리할 수 있습니다.

사용 예시

예를 들어, 문자열과 정수가 함께 들어 있는 다음과 같은 리스트가 있다고 가정해 보겠습니다.

list.Add("Katie");
list.Add(100);
list.Add(200);

문자열(string) 타입만 필터링하기

OfType<string>()을 사용하면 리스트에서 문자열 요소만 추출할 수 있습니다.

var myStr = from a in list.OfType<string>() select a;

정수(int) 타입만 필터링하기

같은 방식으로 정수 타입에도 적용할 수 있습니다.

var myInt = from a in list.OfType<int>() select a;

전체 예제 코드

다음은 OfType() 메서드의 동작을 확인할 수 있는 전체 코드입니다.

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

public class Demo {
    public static void Main() {
        IList list = new ArrayList();
        list.Add("Katie");
        list.Add(100);
        list.Add(200);
        list.Add(300);
        list.Add(400);
        list.Add("Brad");
        list.Add(600);
        list.Add(700);

        var myStr = from a in list.OfType<string>() select a;
        var myInt = from a in list.OfType<int>() select a;

        Console.WriteLine("Strings...");
        foreach (var strVal in myStr) {
            Console.WriteLine(strVal);
        }

        Console.WriteLine("Integer...");
        foreach (var intVal in myInt) {
            Console.WriteLine(intVal);
        }
    }
}

실행 결과

Strings...
Katie
Brad
Integer...
100
200
300
400
600
700

핵심 정리

  • OfType<T>()는 컬렉션에서 T 타입과 호환되는 요소만 필터링하여 반환합니다.
  • 타입이 맞지 않는 요소는 예외 없이 조용히 건너뛰므로 안전하게 사용할 수 있습니다.
  • ArrayList와 같이 여러 타입이 혼재된 비제네릭 컬렉션을 처리할 때 특히 효과적입니다.
  • 반환 결과는 IEnumerable<T>이므로 LINQ 쿼리나 foreach 문에서 바로 활용할 수 있습니다.