1. ホーム
  2. c#

[解決済み] リフレクションを用いたオブジェクトのプロパティ設定

2022-03-15 10:47:30

質問

C#で、リフレクションを使ってオブジェクトのプロパティを設定する方法はありますか?

MyObject obj = new MyObject();
obj.Name = "Value";

を設定したい。 obj.Name をリフレクションで使用します。みたいな感じ。

Reflection.SetProperty(obj, "Name") = "Value";

このような方法はあるのでしょうか?

どのように解決するのですか?

はい。 Type.InvokeMember() :

using System.Reflection;
MyObject obj = new MyObject();
obj.GetType().InvokeMember("Name",
    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
    Type.DefaultBinder, obj, "Value");

これは、以下の場合に例外をスローします。 obj というプロパティがありません。 Name または設定できない。

もう一つの方法は、プロパティのメタデータを取得し、それを設定することです。これにより、そのプロパティの存在を確認し、設定可能かどうかを検証することができます。

using System.Reflection;
MyObject obj = new MyObject();
PropertyInfo prop = obj.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
if(null != prop && prop.CanWrite)
{
    prop.SetValue(obj, "Value", null);
}