通过反射为对象属性赋值

		/// <summary>
        /// 通过反射为对象属性赋值
        /// </summary>
        /// <typeparam name="T">类型参数</typeparam>
        /// <param name="dataList">存储新的属性值集合</param>
        /// <param name="oldModel">反射对象</param>
        protected void SetValue<T>(Dictionary<string, object> dataList, T oldModel)
        {
            PropertyInfo[] propertyInfos = oldModel.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
            foreach (var propertyInfo in propertyInfos)
            {
                //System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
                Type pType = propertyInfo.PropertyType;

                if (dataList.Keys.Contains(propertyInfo.Name))
                {
                    if (pType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                    {
                        oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDecimal(dataList[propertyInfo.Name]), null);
                    }
                    else if (pType.FullName == "System.Nullable`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                    {
                        oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDouble(dataList[propertyInfo.Name]), null);
                    }
                    else if (pType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                    {
                        oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDateTime(dataList[propertyInfo.Name]), null);
                    }
                    else if (pType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                    {
                        oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToInt32(dataList[propertyInfo.Name]), null);
                    }
                    else if (pType.FullName == "System.Nullable`1[[System.Int16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                    {
                        oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToInt16(dataList[propertyInfo.Name]), null);
                    }
                    else
                    {
                        oldModel.GetType()
                                .GetProperty(propertyInfo.Name)
                                .SetValue(oldModel, Convert.ChangeType(dataList[propertyInfo.Name], pType), null);
                    }

                }
            }

        }

克隆对象属性值

/// <summary>
/// 克隆对象的属性值
 /// </summary>
 /// <returns>T</returns>
 public T Clone<T>(T oldObj) where T : class, new()
 {
     T newObject = Activator.CreateInstance(oldObj.GetType()) as T;
     System.Reflection.PropertyInfo[] oldProperty = oldObj.GetType().GetProperties();
     for (int i = 0; i < oldProperty.Length; i++)
     {
         PropertyInfo property = oldProperty[i];
         if (property.Name.ToLower() == "id")//不复制编号值
             continue;
         object propertyvalue = oldProperty[i].GetValue(oldObj, null);
         oldProperty[i].SetValue(newObject, propertyvalue, null);
     }
     return newObject;
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你有一个类`MyClass`,其中有一个类型为`List<MyObject>`的属性`myList`,你可以使用反射将一个对象集合赋值给该属性,具体步骤如下: 1. 获取`MyClass`类的`myList`属性对象。 ```java Field field = MyClass.class.getDeclaredField("myList"); ``` 2. 将`myList`属性的访问权限设置为可修改。 ```java field.setAccessible(true); ``` 3. 创建一个对象集合,并向其中添加`MyObject`对象。 ```java List<MyObject> list = new ArrayList<>(); list.add(new MyObject("Object 1")); list.add(new MyObject("Object 2")); ``` 4. 将对象集合赋值给`myList`属性。 ```java MyClass obj = new MyClass(); field.set(obj, list); ``` 完整代码如下: ```java // 获取MyClass类的myList属性对象 Field field = MyClass.class.getDeclaredField("myList"); // 将myList属性的访问权限设置为可修改 field.setAccessible(true); // 创建一个对象集合,并向其中添加MyObject对象 List<MyObject> list = new ArrayList<>(); list.add(new MyObject("Object 1")); list.add(new MyObject("Object 2")); // 将对象集合赋值给myList属性 MyClass obj = new MyClass(); field.set(obj, list); ``` 需要注意的是,如果你希望通过该属性修改原始对象集合,你需要使用相同的对象集合对象进行赋值操作,例如: ```java List<MyObject> list = new ArrayList<>(); list.add(new MyObject("Object 1")); list.add(new MyObject("Object 2")); MyClass obj = new MyClass(); field.set(obj, list); // 修改原始对象集合 list.add(new MyObject("Object 3")); System.out.println(obj.myList); // 输出 [Object 1, Object 2, Object 3] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值