私はC#クラスのプロパティの名前を知っています。反射を使用してこのプロパティの値を設定することは可能ですか?Reflectionでプロパティ値を設定できますか?
たとえば、プロパティの名前がstring propertyName = "first_name";
であることがわかっているとします。そしてそこにはfirst_name
と呼ばれるプロパティが存在します。この文字列を使って設定できますか?
私はC#クラスのプロパティの名前を知っています。反射を使用してこのプロパティの値を設定することは可能ですか?Reflectionでプロパティ値を設定できますか?
たとえば、プロパティの名前がstring propertyName = "first_name";
であることがわかっているとします。そしてそこにはfirst_name
と呼ばれるプロパティが存在します。この文字列を使って設定できますか?
はい、反射を使用することができます - Type.GetProperty
(必要に応じてバインディングフラグを指定)でフェッチしてから、SetValue
を適切に呼び出してください。サンプル:それは公共の財産ではない場合
using System;
class Person
{
public string Name { get; set; }
}
class Test
{
static void Main(string[] arg)
{
Person p = new Person();
var property = typeof(Person).GetProperty("Name");
property.SetValue(p, "Jon", null);
Console.WriteLine(p.Name); // Jon
}
}
、あなたがGetProperty
呼び出しでBindingFlags.NonPublic | BindingFlags.Instance
を指定する必要があります。以下は
は、C#.NETの
using System;
using System.Reflection;
namespace app
{
class Tre
{
public int Field1 = 0;
public int Prop1 {get;set;}
public void Add()
{
this.Prop1+=this.Field1;
}
}
class Program
{
static void Main(string[] args)
{
Tre o = new Tre();
Console.WriteLine("The type is: {0}", o.GetType()); //app.Tre
Type tp = Type.GetType("app.Tre");
object obj = Activator.CreateInstance(tp);
FieldInfo fi = tp.GetField("Field1");
fi.SetValue(obj, 2);
PropertyInfo pi = tp.GetProperty("Prop1");
pi.SetValue(obj, 4);
MethodInfo mi = tp.GetMethod("Add");
mi.Invoke(obj, null);
Console.WriteLine("Field1: {0}", fi.GetValue(obj)); // 2
Console.WriteLine("Prop1: {0}", pi.GetValue(obj)); // 4 + 2 = 6
Console.ReadLine();
}
}
}
で書かれた私のテストスニペットは、それは静的プロパティですか? – BoltClock
私は質問の名前を「リフレクションを使ってプロパティの値を設定できますか?答えは:はい、可能です。あなたはそれを行うことができます。 –
@SnowbearタイトルでQuestionを使用することができず、15文字にする必要がありました。タイトルが気に入らなければ、それを変更してください。 – user489041