一尘不染

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

c#

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

例如,说我知道属性的名称是string propertyName = "first_name";。实际上存在一个称为的属性first_name。我可以使用此字符串设置它吗?


阅读 260

收藏
2020-05-19

共1个答案

一尘不染

是的,您可以使用反射-只需使用反射进行提取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.InstanceGetProperty通话中指定。

2020-05-19