温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

setvalue属性如何正确的在C# 中使用

发布时间:2021-01-20 11:54:08 来源:亿速云 阅读:1248 作者:Leah 栏目:开发技术

本篇文章为大家展示了setvalue属性如何正确的在C# 中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

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方法就捕捉不到我想要赋值的这些字段,只需要将这些字段设置为自动属性即可。

补充:C# Property.SetValue()利用反射给某个泛型对象的属性赋值的问题

问题描述:

在一个泛型方法中,实例化一个泛型对象后,利用反射获取该泛型中的所有属性,再给该对象的这些属性赋值,打断点发现,泛型对象被实例化出来了,没有问题;所要赋值的属性值也没有问题,但调用Property.SetValue()后,泛型对象中的值就是赋不上。

上述内容就是setvalue属性如何正确的在C# 中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI