C#のGetNestedTypeメソッドで現在の型内にネストされた特定の型を取得する方法
C#では、Type.GetNestedType()メソッドを使用することで、現在の型(Type)内にネストされた特定の型を取得できます。このメソッドは、指定した名前を持つ入れ子の型を検索し、対応するTypeオブジェクトを返します。
基本構文
public Type GetNestedType(string name);
引数nameには、取得したい入れ子の型の名前を文字列で指定します。該当する型が存在しない場合はnullが返されます。
例1:ネストされた型を取得する
以下のコードは、Subjectクラス内にネストされた「AdvSubject」クラスを取得する例です。
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」は、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 {
//
}
}出力
この場合、引数にnullが指定されているため例外がスローされ、次の出力が得られます。
System.ArgumentNullException
まとめ
GetNestedType()メソッドを使えば、リフレクションを通じて型内のネストされた型を動的に取得できます。ただし、引数にnullを渡すとArgumentNullExceptionが発生するため、実務ではtry-catchによる適切な例外処理や、呼び出し前のnullチェックを組み合わせることが重要です。
-
C#で現在のインスタンスの型を取得する方法(GetTypeメソッド)
C#でオブジェクトの現在のインスタンスの型(実行時の型)を取得するには、GetType()メソッドを使用します。このメソッドはすべての型の基底クラスであるSystem.Objectに定義されており、呼び出し元インスタンスの正確な型をSystem.Typeオブジェクトとして返します。 GetType()メソッドの基本 GetType()はインスタンスに対して呼び出すことで、その実行時の型情報を取得できます。戻り値であるTypeオブジェクトをそのまま文字列連結して出力すると、「System.String」や「System.Int32」のような完全修飾型名が表示されます。 例1:string型のイン
-
C#で列挙型(Enum)の型を取得する方法
C#で列挙型(Enum)の型情報を取得するには、GetType()メソッドを使用します。この記事では、実際のコード例を通じて、列挙型の型名や基になる型(Underlying Type)の取得方法をわかりやすく解説します。 列挙型の準備 まず、複数の列挙型の値を格納した配列を用意します。ここでは、.NET標準ライブラリに含まれる ConsoleColor と DayOfWeek の2つの列挙型を使用します。 Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday}; GetType()メソッドで型を取得する 列挙値の型を取得するには、各値