在C#中,有什么方法可以使用反射来设置对象属性?
例如:
MyObject obj = new MyObject(); obj.Name = "Value";
我想开始obj.Name思考。就像是:
obj.Name
Reflection.SetProperty(obj, "Name") = "Value";
有办法吗?
是的,您可以使用Type.InvokeMember():
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,或者无法设置,则会抛出异常。
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); }