C#中属性PropertyInfo的setvalue方法

下面是关于setvalue方法的介绍以及错误简介
用索引化属性的可选索引值设置指定对象的该属性值。
C#

public virtual void SetValue (object obj, object value, object[] index);

参数
obj Object
将设置其属性值的对象。
value Object
新的属性值。
index Object[]
索引化属性的可选索引值。 对于非索引化属性,该值应为 null。
实现

SetValue(Object, Object, Object[])

异常

ArgumentException

index 数组不包含所需的参数类型。
或 找不到该属性的 set 取值函数。

  • 或 - value 无法转换为 PropertyType的类型。
TargetException

在适用于 Windows 应用商店应用的 .NET 或可移植类库中,改为捕获 Exception。

该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。
TargetParameterCountException
index 中的参数数量与索引属性采用的参数数量不匹配。

MethodAccessException

在适用于 Windows 应用商店应用的 .NET 或可移植类库中,改为捕获基类异常 MemberAccessException。

试图非法访问类中的私有或受保护方法。
TargetInvocationException
设置属性值时出错。 例如,为一个索引属性指定的索引值超出范围。 InnerException 属性指示出错的原因。

例子

 Dictionary<string, string> dic = new Dictionary<string, string>();
            foreach (Control control  in this.Controls )//获取控件中所有值,添加到字典中
            {
                if (control is TextBox ||control is ComboBox ||control is DateTimePicker )
                {
                    dic.Add (control.Name, control.Text);
                }
            }
            PropertyInfo[] propertys = incomingnews.GetType().GetProperties();
            foreach (PropertyInfo property in propertys)//运用propertyinfo的映射方法,给实体类incomingnews的所有属性赋值。
            {
                for (int i = 0; i<dic.Count; i++)
                {
                    property.SetValue(incomingnews, dic[property.Name].ToString(), null);
                }
            }

之前有个小错误一直弄不出来,后来看了错误提示“index 数组不包含所需的参数类型。或 找不到该属性的 set 取值函数。- 或 - value 无法转换为 PropertyType的类型。”发现自己想要赋值的实体类不是实体的属性,而是实体的字段,所以setvalue方法就捕捉不到我想要赋值的这些字段,只需要将这些字段设置为自动属性即可。

评论 10 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

锋璠

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值