Example #1
0
        /// <summary>
        /// 向属性填充值(强制使用指定的类型)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="prop"></param>
        /// <param name="value"></param>
        /// <param name="specialType"></param>
        public static void FillSystemType <T>(T entity, PropertyInfo prop, IConvertible value, Type specialType)
        {
            object setValue = null;

            if (value.GetType() != specialType)
            {
                switch (specialType.Name)
                {
                case "Boolean":
                    setValue = value.ConvertTo <bool>();
                    break;

                case "DateTime":
                    setValue = DateTimeHelper.GetDateTimeFromXml(value.ToString());
                    break;

                case "Int32":
                    setValue = value.ConvertTo <int>();
                    break;

                case "Int64":
                    setValue = value.ConvertTo <long>();
                    break;

                case "Double":
                    setValue = value.ConvertTo <double>();
                    break;

                case "String":
                    setValue = value.ToString(CultureInfo.InvariantCulture);
                    break;

                default:
                    setValue = value;
                    break;
                }
            }

            switch (specialType.Name)
            {
            case "Nullable`1":     //可为空对象
            {
                if (!string.IsNullOrEmpty(value as string))
                {
                    var genericArguments = prop.PropertyType.GetGenericArguments();
                    FillSystemType(entity, prop, value, genericArguments[0]);
                }
                else
                {
                    prop.SetValue(entity, null, null);        //默认通常为null
                }
                break;
            }

            //case "String":
            //    goto default;
            //case "Boolean":
            //case "DateTime":
            //case "Int32":
            //case "Int64":
            //case "Double":
            default:
                prop.SetValue(entity, setValue ?? value, null);
                break;
            }
        }
Example #2
0
 public static T ConvertTo <T>(this IConvertible convertibleValue)
 {
     return(convertibleValue.ConvertTo <T>(default(T)));
 }