C# 中属性PropertyInfo的setvalue用法说明
下面是关于setvalue方法的介绍以及错误简介
用索引化属性的可选索引值设置指定对象的该属性值。
C#
publicvirtualvoidSetValue(objectobj,objectvalue,object[]index);
参数
objObject
将设置其属性值的对象。
valueObject
新的属性值。
indexObject[]
索引化属性的可选索引值。对于非索引化属性,该值应为null。
实现
SetValue(Object,Object,Object[])
异常
ArgumentException
index数组不包含所需的参数类型。
或找不到该属性的set取值函数。
或-value无法转换为PropertyType的类型。
TargetException
在适用于Windows应用商店应用的.NET或可移植类库中,改为捕获Exception。
该对象与目标类型不匹配,或者某属性是实例属性但obj为null。
TargetParameterCountException
index中的参数数量与索引属性采用的参数数量不匹配。
MethodAccessException
在适用于Windows应用商店应用的.NET或可移植类库中,改为捕获基类异常MemberAccessException。
试图非法访问类中的私有或受保护方法。
TargetInvocationException
设置属性值时出错。例如,为一个索引属性指定的索引值超出范围。InnerException属性指示出错的原因。
例子
Dictionarydic=newDictionary (); foreach(Controlcontrolinthis.Controls)//获取控件中所有值,添加到字典中 { if(controlisTextBox||controlisComboBox||controlisDateTimePicker) { dic.Add(control.Name,control.Text); } } PropertyInfo[]propertys=incomingnews.GetType().GetProperties(); foreach(PropertyInfopropertyinpropertys)//运用propertyinfo的映射方法,给实体类incomingnews的所有属性赋值。 { for(inti=0;i 之前有个小错误一直弄不出来,后来看了错误提示“index数组不包含所需的参数类型。
或找不到该属性的set取值函数。
或value无法转换为PropertyType的类型。”
发现自己想要赋值的实体类不是实体的属性,而是实体的字段,所以setvalue方法就捕捉不到我想要赋值的这些字段,只需要将这些字段设置为自动属性即可。
补充:C#Property.SetValue()利用反射给某个泛型对象的属性赋值的问题
问题描述:
在一个泛型方法中,实例化一个泛型对象后,利用反射获取该泛型中的所有属性,再给该对象的这些属性赋值,打断点发现,泛型对象被实例化出来了,没有问题;所要赋值的属性值也没有问题,但调用Property.SetValue()后,泛型对象中的值就是赋不上。
问题解决:
调用该泛型方法时,传入的类型是个结构体。。这个方法只支持class,不支持struct。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。