• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C#如何通过对象属性名修改值的实例

c# 搞代码 4年前 (2022-01-09) 11次浏览 已收录 0个评论

摘自:csdn

给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致。

创建对象实例的两种方法:

1.

var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");

2.

 var obj = Activator.CreateInstance(ClassType);

创建好实例时,现在可以给当前实例的某个属性赋值,首先获取要赋值的属性。

var property = obj.GetType().GetProperty("PropertyName");//此时可以使用GetProperty获取属性数组,循环进行赋值,这里主要讲解类型问题。

赋值可通过PropertyInfo.SetValue()方法,详见MSDN。

情况1,该属性类型是已知类型,例如:int

int value=500;property.SetValue(obj,value,null);

这里需要注意value值的类型必须和属性类型一致,否则会抛出TargetException异常。

情况2,该属性类型是已知类型,原值是其他类型。例如:目标类型为int,值为string

string value="500";property.SetValue(obj,int.TryParse(value),null);//类型转换。

前两种情况都很简单,有时业务会比较复杂,对目标类型不确定,需要程序运行时判断。

情况3,该属性类型是未知非泛型类型,不确定目标类型,如何进行类型转换。

object value="500";property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//类型转换。

这样就可以解决大多数问题了。

不知道大家有没有注意,我在第三种情况强调了非泛型,难道泛型就不行了吗?
是的。如果只是用Convert.ChangeType()方法,类型转换仍然报错,先看下面的代码。

即使目标类型和值的类型是一致,通过Convert.ChangeType()进行转换仍然报错。
解决这个问题,就要先把属性值类型转成基类型后,在进行Convert转换。看代码这样,在使用Convert.ChangeType()转换可空类型时,就不会报错了。
再增加一些基础的判断验证,代码就比较完善了。

if (!property.PropertyType.IsGenericType)            {                //非泛型                property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, property.PropertyType), null);            }            else            {                //泛型Nullable<>                Type genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition();                                if (genericTypeDefinition == typeof(Nullable<>))                {         property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, Nullable.GetUnderlyin<em>本文来源[email protected]搞@^&代*@码)网5</em>gType(property.PropertyType)), null);                }            }

以上就是C#如何通过对象属性名修改值的实例的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#如何通过对象属性名修改值的实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址