反射操作时经常遇到类型转换操作,但系统的System.Convert.ChangeType不支持枚举ENUM和可空类型Nullable转换。
使用强化版System.Convert.ChangeType前:
enum MyEnum
{
Test1=0,
Test2=1
}
class model
{
public DateTime? StartDate{get;set;}
public MyEnum MyType{get;set;}
}
Type t = typeof (model);
PropertyInfo[] props = t.GetProperties();
var m=new model();
var p1=props.FirstOrDefault(p=>p.Name.Equals("StartDate"));
p1.SetValue(m, Convert.ChangeType(DateTime.Now, p1.PropertyType), null);
这里为可空类型Nullable偿试赋值会产生异常。
var p2=props.FirstOrDefault(p=>p.Name.Equals("MyType"));
p2.SetValue(m, Convert.ChangeType(1, p2.PropertyType), null);
这里为枚举ENUM赋值时,不会自动转换1成MyEnum.Test2,所以会异常。
加强版System.Convert.ChangeType如下:
<