最近在做项目的时候,因为懒得一个一个字段地赋值,使用了反射动态为属性赋值,但是碰到类型转换时错误,
public static object TypeRransition(Type t, object value)
{
object result = null;
switch (t.Name)
{
case "String":
result = Convert.ToString(value);
break;
case "Int32":
result = Convert.ToInt32(value);
break;
case "DateTime":
result = Convert.ToDateTime(value);
break;
case "Double":
result = Convert.ToDouble(value);
break;
case "Decimal":
result = Convert.ToDecimal(value);
break;
case "Byte":
result = Convert.ToByte(value);
break;
case "Boolean":
result = Convert.ToBoolean(value);
break;
case "Guid":
result = new Guid();
break;
}
return result;
}
后来发现代码还可以精简
public static object TypeRransition(Type type, object value)
{
object obj = null;
if (!Convert.IsDBNull(value))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
Type t = type.GetGenericArguments()[0];
string a = t.Name;
obj = TypeRransition(t, value);
}
else
{
obj = Convert.ChangeType(value, type);
}
}
return obj;
}