我可以用Reflection设置属性值吗?

时间:2011-10-10 21:16:51

标签: c# reflection

我知道C#类中属性的名称。是否可以使用反射来设置此属性的值?

例如,假设我知道属性的名称是string propertyName = "first_name";。并且存在一个名为first_name的属性。我可以使用此字符串进行设置吗?

1 个答案:

答案 0 :(得分:63)

是的,你可以使用反射 - 只需用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
    }
}

如果它不是公共财产,您需要在BindingFlags.NonPublic | BindingFlags.Instance电话中指定GetProperty