使用反射设置对象属性

使用反射设置对象属性

在C#中是否有一种方法可以使用反射来设置对象属性?

例:

MyObject obj = new MyObject();obj.Name = "Value";

我想obj.Name带着倒影。类似于:

Reflection.SetProperty(obj, "Name") = "Value";

有办法吗?


DIEA
浏览 725回答 3
3回答

FFIVE

是的,你可以用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);}

SMILET

你也可以这样做:Type type = target.GetType();PropertyInfo prop = type.GetProperty("propertyName");prop.SetValue (target, propertyValue, null);其中,目标是要设置其属性的对象。

神不在的星期二

反射,基本上,即myObject.GetType().GetProperty(property).SetValue(myObject, "Bob", null);或者在方便性和性能方面都有帮助的库;例如紧要关头:var wrapped = ObjectAccessor.Create(obj); wrapped[property] = "Bob";(这也具有不需要事先知道它是字段还是属性的优点)
打开App,查看更多内容
随时随地看视频慕课网APP