首页后端开发ASP.NETC#如何通过对象属性名修改值的实例

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

时间2024-01-30 18:20:03发布访客分类ASP.NET浏览181
导读:收集整理的这篇文章主要介绍了C#如何通过对象属性名修改值的实例,觉得挺不错的,现在分享给大家,也给大家做个参考。摘自:csdn给一个对象属性赋值可以通过PRoPErtyInfo.SetValue( 方式进行赋值,但要注意值的类型要与属性保持...
收集整理的这篇文章主要介绍了C#如何通过对象属性名修改值的实例,觉得挺不错的,现在分享给大家,也给大家做个参考。

摘自: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.GetUnderlyingType(property.PropertyType)), null);
                }
            }
    

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.netcsharp

若转载请注明出处: C#如何通过对象属性名修改值的实例
本文地址: https://pptw.com/jishu/592872.html
C#中异步编程4async与await异步程序开发的实例分析 C#中引用类型之特例string的详细介绍

游客 回复需填写必要信息