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