C#의 Type.GetTypeArray() 메서드는 지정된 객체 배열(object[])에 담긴 각 요소의 실제 타입을 조회하는 데 사용됩니다. Type 클래스에 속한 정적(static) 메서드로, 입력 배열의 요소 순서와 동일한 순서로 타입 정보(Type[])를 반환하기 때문에 서로 다른 자료형이 섞여 있는 배열을 다룰 때 특히 유용합니다.
구문
기본 구문은 다음과 같습니다.
public static Type[] GetTypeArray (object[] args);
매개변수 args는 타입을 확인하고자 하는 객체들이 들어 있는 배열입니다. 반환되는 Type 배열은 입력 배열의 각 요소와 인덱스가 1:1로 대응됩니다.
사용 시 주의 사항
- ArgumentNullException: args 매개변수가 null이면 발생합니다.
- TypeLoadException: 타입을 찾거나 로드할 수 없는 경우 발생할 수 있습니다.
- 입력 배열에 null 요소가 포함되어 있으면 결과 배열의 해당 위치에도 null이 반환됩니다.
예제 1: 기본 사용법
다양한 자료형이 섞인 객체 배열에서 각 요소의 타입을 출력해 보겠습니다.
using System;
using System.Reflection;
public class Demo {
public static void Main() {
Object[] obj = new Object[5];
obj[0] = 10.20;
obj[1] = 20;
obj[2] = 30;
obj[3] = 40;
obj[4] = "tom";
Type[] type = Type.GetTypeArray(obj);
Console.WriteLine("Types...");
for (int i = 0; i < type.Length; i++)
Console.WriteLine(" {0}", type[i]);
}
}
실행 결과는 다음과 같습니다.
Types... System.Double System.Int32 System.Int32 System.Int32 System.String
첫 번째 요소는 double 리터럴이므로 System.Double로, 이어지는 세 개의 정수 값은 System.Int32로, 마지막 문자열은 System.String으로 각각 판별된 것을 확인할 수 있습니다.
예제 2: decimal 타입이 포함된 배열
이번에는 m 접미사를 사용한 decimal 값이 포함된 배열로 테스트해 보겠습니다.
using System;
using System.Reflection;
public class Demo {
public static void Main() {
Object[] obj = new Object[5];
obj[0] = 100m;
obj[1] = 20.98;
obj[2] = 30.788m;
obj[3] = 40;
obj[4] = "jack";
Type[] type = Type.GetTypeArray(obj);
Console.WriteLine("Types...");
for (int i = 0; i < type.Length; i++)
Console.WriteLine(" {0}", type[i]);
}
}
실행 결과는 다음과 같습니다.
Types... System.Decimal System.Double System.Decimal System.Int32 System.String
숫자 뒤에 m 접미사가 붙은 값은 System.Decimal로, 일반적인 부동소수점 리터럴은 System.Double로 식별됩니다. 이처럼 Type.GetTypeArray() 메서드를 활용하면 요소 하나씩 반복해서 타입을 조사하지 않고도 단 한 번의 호출로 배열 전체의 타입 정보를 얻을 수 있어 코드가 훨씬 간결해집니다.