我知道C#类中的属性名称。是否可以使用反射来设置此属性的值?
例如,说我知道属性的名称是string propertyName = "first_name";。实际上存在一个称为的属性first_name。我可以使用此字符串设置它吗?
string propertyName = "first_name";
first_name
是的,您可以使用反射-只需使用反射进行提取Type.GetProperty(必要时指定绑定标志),然后进行SetValue适当的调用即可。样品:
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通话中指定。
BindingFlags.NonPublic | BindingFlags.Instance
GetProperty