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

34

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

例如,假设我知道属性的名称是string propertyName = "first_name";,并且实际上存在名为first_name的属性。我能否使用这个字符串来设置它的值?


这是一个静态属性吗? - BoltClock
1
我会将问题重命名为:“是否可以使用反射来设置属性的值?”答案是:是的,这是可能的。你可以做到。 - Al Kepp
@Snowbear,标题不允许使用“问题”两个字,必须是15个字符。如果您不喜欢这个标题,可以更改它。 - user489041
@BoltClock 不,它不是一个静态属性。 - user489041
1个回答

77

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接