我知道c#类中一个属性的名称。是否可以使用反射来设置此属性的值?
例如,假设我知道一个属性的名称是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