C# のメタプログラミング (Reflection) で、インスタンスのプロパティ値を動的に取得するには、Type#GetProperty メソッドを使用します。 プロパティ値を動的に取得する方法は以下の通りです。
- 調査対象のインスタンスを用意する。
- インスタンスのクラスを Type#GetType で Type 型を取得する。
- クラスから型を取得したいときは
Type t = typeof(MyPropertyClass);
- インスタンスから型を取得したいときは
Type t = new MyPropertyClass().GetType();
- 文字列から型を取得したいときは
Type t = Type.GetType("System.String", true);
- クラスから型を取得したいときは
- Type#GetProperty メソッドの引数にプロパティ名の文字列を渡して実行する。
- 取得できないときは null、取得できたときは PropertyInfo 型が返り値として得られる。
- PropertyInfo#GetValue メソッドの引数にインスタンスを渡すことで、そのインスタンスにあるプロパティの値を取得することができる。
using System.Reflection;
// 検証用クラス
public class MyPropertyClass
{
public int Property1 { get; set; }
public string? Property2 { get; set; }
}
public class ExampleGetProperties
{
public static void Main()
{
var myprop = new MyPropertyClass() {
Property1 = 123,
Property2 = "hello"
};
Type t = myprop.GetType();
PropertyInfo? propInfo1 = t.GetProperty("Property1"); // プロパティ情報の取得
Console.WriteLine($"プロパティ名: {propInfo1?.Name}");
Console.WriteLine($"プロパティ型: {propInfo1?.PropertyType}");
Console.WriteLine($"プロパティ値: {propInfo1?.GetValue(myprop)}"); // プロパティ値の取得
Console.WriteLine();
PropertyInfo? propInfo2 = t.GetProperty("Property2"); // プロパティ情報の取得
Console.WriteLine($"プロパティ名: {propInfo2?.Name}");
Console.WriteLine($"プロパティ型: {propInfo2?.PropertyType}");
Console.WriteLine($"プロパティ値: {propInfo2?.GetValue(myprop)}"); // プロパティ値の取得
Console.WriteLine();
}
}
プログラムを実行すると以下の結果が出力されます。
プロパティ名: Property1
プロパティ型: System.Int32
プロパティ値: 123
プロパティ名: Property2
プロパティ型: System.String
プロパティ値: hello
以上です。