Billpeng Space

技术源自生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c# 利用反射设置属性值

Posted on 2012-08-29 18:02  billpeng  阅读(11511)  评论(0编辑  收藏  举报
        /// <summary>
          /// 设置相应属性的值
          /// </summary>
          /// <param name="entity">实体</param>
          /// <param name="fieldName">属性名</param>
          /// <param name="fieldValue">属性值</param>
          public static void SetValue(object entity, string fieldName, string fieldValue)
          {
              Type entityType = entity.GetType();
 
             PropertyInfo propertyInfo = entityType.GetProperty(fieldName);
 
             if (IsType(propertyInfo.PropertyType, "System.String"))
             {
                 propertyInfo.SetValue(entity, fieldValue, null);
 
             }
 
             if (IsType(propertyInfo.PropertyType, "System.Boolean"))
             {
                 propertyInfo.SetValue(entity, Boolean.Parse(fieldValue), null);
 
             }
 
             if (IsType(propertyInfo.PropertyType, "System.Int32"))
             {
                 if (fieldValue != "")
                     propertyInfo.SetValue(entity, int.Parse(fieldValue), null);
                 else
                     propertyInfo.SetValue(entity, 0, null);
 
            }
 
             if (IsType(propertyInfo.PropertyType, "System.Decimal"))
             {
                 if (fieldValue != "")
                     propertyInfo.SetValue(entity, Decimal.Parse(fieldValue), null);
                 else
                     propertyInfo.SetValue(entity, new Decimal(0), null);
 
             }
 
             if (IsType(propertyInfo.PropertyType, "System.Nullable`1[System.DateTime]"))
             {
                 if (fieldValue != "")
                 {
                    try
                     {
                         propertyInfo.SetValue(
                             entity,
                             (DateTime?)DateTime.ParseExact(fieldValue, "yyyy-MM-dd HH:mm:ss", null), null);
                     }
                     catch
                     {
                         propertyInfo.SetValue(entity, (DateTime?)DateTime.ParseExact(fieldValue, "yyyy-MM-dd", null), null);
                     }
                 }
                 else
                     propertyInfo.SetValue(entity, null, null);
 
             }
 
         }

 

 

         /// <summary>
         /// 类型匹配
         /// </summary>
         /// <param name="type"></param>
         /// <param name="typeName"></param>
         /// <returns></returns>
         public static bool IsType(Type type, string typeName)
         {
             if (type.ToString() == typeName)
                 return true;
             if (type.ToString() == "System.Object")
                 return false;
 
             return IsType(type.BaseType, typeName);
         }