在 C# 中有没有一种方法可以使用反射来设置对象属性?
例如:
MyObject obj = new MyObject();
obj.Name = "Value";
我想用反射设置obj.Name
。像这样的东西:
Reflection.SetProperty(obj, "Name") = "Value";
有没有办法做到这一点?
最佳答案
是的,您可以使用Type.InvokeMember()
:
using System.Reflection;
MyObject obj = new MyObject();
obj.GetType().InvokeMember("Name",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, obj, "Value");
如果 obj
没有名为 Name
的属性,或者无法设置,这将引发异常。
另一种方法是获取属性的元数据,然后对其进行设置。这将允许您检查该属性是否存在,并验证它是否可以设置:
using System.Reflection;
MyObject obj = new MyObject();
PropertyInfo prop = obj.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
if(null != prop && prop.CanWrite)
{
prop.SetValue(obj, "Value", null);
}
关于c# - 使用反射设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619767/