使用属性名称设置属性值
可能重复:
我可以用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 ; } }