我知道C#类中属性的名称。是否可以使用反射来设置此属性的值?
例如,假设我知道属性的名称是string propertyName = "first_name";
。并且存在一个名为first_name
的属性。我可以使用此字符串进行设置吗?
答案 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
。