/// <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; } }
public static T ConvertTo <T>(this IConvertible convertibleValue) { return(convertibleValue.ConvertTo <T>(default(T))); }