C#动态设置属性

可能重复:
.Net – reflection集对象属性
通过reflection使用字符串值设置属性

我确信有一个简单的方法可以做到这一点而且我很厚,但我无法弄清楚我的生活。

我有一个具有多个属性的对象。 我们将对象称为objName。 我正在尝试创建一个只使用新属性值更新对象的方法。

我希望能够在方法中执行以下操作:

private void SetObjectProperty(string propertyName, string value, ref object objName) { //some processing on the rest of the code to make sure we actually want to set this value. objName.propertyName = value } 

最后,电话:

 SetObjectProperty("nameOfProperty", textBoxValue.Text, ref objName); 

希望这个问题足够充实。 如果您需要更多详细信息,请告诉我们。

谢谢你的答案!

objName.GetType().GetProperty("nameOfProperty").SetValue(objName, objValue, null)

您可以使用Reflection来执行此操作,例如

 private void SetObjectProperty(string propertyName, string value, object obj) { PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName); // make sure object has the property we are after if (propertyInfo != null) { propertyInfo.SetValue(obj, value, null); } } 

您可以使用Type.InvokeMember执行此操作。

 private void SetObjectProperty(string propertyName, string value, rel objName) { objName.GetType().InvokeMember(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, objName, value); } 

首先获取属性信息,然后在属性上设置值:

 PropertyInfo propertyInfo = objName.GetType().GetProperty(propertyName); propertyInfo.SetValue(propertyInfo, value, null); 

你可以通过反思来做到这一点:

 void SetObjectProperty(object theObject, string propertyName, object value) { Type type=theObject.GetType(); var property=type.GetProperty(propertyName); var setter=property.SetMethod(); setter.Invoke(theObject, new ojbject[]{value}); } 

注意:为了便于阅读,故意遗漏error handling。