使用属性名称设置属性值

可能重复:
我可以用Reflection设置属性值吗?

当我只有属性的字符串名称时,如何使用reflection设置类的静态属性? 比如我有:

List<KeyValuePair> _lObjects = GetObjectsList(); foreach(KeyValuePair _pair in _lObjects) { //class have this static property name stored in _pair.Key Class1.[_pair.Key] = (cast using typeof (_pair.Value))_pair.Value; } 

我不知道应该如何使用属性名称字符串设置属性的值。 一切都充满活力。 我可以使用列表中的每个具有不同类型的5个项目来设置类的5个静态属性。

谢谢你的帮助。

回答:

 Type _type = Type.GetType("Namespace.AnotherNamespace.ClassName"); PropertyInfo _propertyInfo = _type.GetProperty("Field1"); _propertyInfo.SetValue(_type, _newValue, null); 

你可以尝试这样的事情

 List> _lObjects = GetObjectsList(); var class1 = new Class1(); var class1Type = typeof(class1); foreach(KeyValuePair _pair in _lObjects) { //class have this static property name stored in _pair.Key class1Type.GetProperty(_pair.Key).SetValue(class1, _pair.Value); } 

您可以像这样获取PropertyInfo并设置值

 var propertyInfo=obj.GetType().GetProperty(propertyName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); propertyInfo.SetValue(obj, value,null); 

像这样:

 class Widget { static Widget() { StaticWidgetProperty = int.MinValue ; return ; } public Widget( int x ) { this.InstanceWidgetProperty = x ; return ; } public static int StaticWidgetProperty { get ; set ; } public int InstanceWidgetProperty { get ; set ; } } class Program { static void Main() { Widget myWidget = new Widget(-42) ; setStaticProperty( typeof(Widget) , "StaticWidgetProperty" , 72 ) ; setInstanceProperty( myWidget , "InstanceWidgetProperty" , 123 ) ; return ; } static void setStaticProperty( Type type , string propertyName , PROPERTY_TYPE value ) { PropertyInfo propertyInfo = type.GetProperty( propertyName , BindingFlags.Public|BindingFlags.Static , null , typeof(PROPERTY_TYPE) , new Type[0] , null ) ; propertyInfo.SetValue( null , value , null ) ; return ; } static void setInstanceProperty( object instance , string propertyName , PROPERTY_TYPE value ) { Type type = instance.GetType() ; PropertyInfo propertyInfo = type.GetProperty( propertyName , BindingFlags.Instance|BindingFlags.Public , null , typeof(PROPERTY_TYPE) , new Type[0] , null ) ; propertyInfo.SetValue( instance , value , null ) ; return ; } }