使用反射设置对象属性

在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);

}

以上是 使用反射设置对象属性 的全部内容, 来源链接: utcz.com/qa/410966.html

回到顶部