C#에서 현재 Type 내에 중첩된 특정 형식(nested type)을 가져오려면 GetNestedType() 메서드를 사용하면 됩니다. 이 메서드는 System.Type 클래스에 정의되어 있으며, 찾고자 하는 중첩 형식의 이름을 문자열 인수로 전달하면 해당 형식의 Type 객체를 반환합니다.
이름이 일치하는 중첩 형식이 존재하지 않으면 null을 반환하고, 인수로 null을 전달하면 ArgumentNullException이 발생한다는 점에 유의해야 합니다.
예제 1: 특정 중첩 형식 가져오기
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(Subject);
try {
Type type2 = type1.GetNestedType("AdvSubject");
Console.Write("NestedType = "+ type2);
}
catch (ArgumentNullException e) {
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject {
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
NestedType = Subject+AdvSubject
출력에서 Subject+AdvSubject처럼 부모 형식 이름 뒤에 '+' 기호로 중첩 형식 이름이 표시됩니다. 이는 C#에서 중첩 형식의 정규화된 이름을 나타내는 표준 방식입니다.
예제 2: null 인수 전달 시 예외 발생
이번에는 GetNestedType() 메서드에 null을 전달했을 때 어떻게 동작하는지 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(Subject);
try {
Type type2 = type1.GetNestedType(null);
Console.Write("NestedType = "+ type2);
}
catch (ArgumentNullException e) {
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject {
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
System.ArgumentNullException
중첩 형식 이름으로 null을 전달하면 유효하지 않은 인수로 간주되어 ArgumentNullException이 발생합니다. 따라서 실무에서는 try-catch 블록을 활용해 이러한 예외 상황을 반드시 처리하는 것이 좋습니다.