c#通过反射获得泛型类的属性和值

今天在写代码的时候发现,在使用EF来更新实体类的时候发现,如果有一个字段的值是null,在更新的时候EF就会报错.然后同事说修改下实体类,将那个属性修改成可空类型的.然后还是不行,我看了下这个实体类所对应的表,发现在表中那个字段定义的是not null,default ""什么什么的.所以问题不是实体类哪儿,只是表中这个字段不可为空,在插入的时候如果不写这个字段会自动填充他,可是在更新的时候就不行了.于是想着写一个公共方法,将实体类中的null值的属性修改成数据库中默认属性就好了. 下面是代码

public void ResetPro<T>(T val,string strdefault="") 
 { 
 //获得泛型类型的公共属性
    var pros = typeof(T).GetProperties();
    int i = 0; foreach (PropertyInfo p in pros) 
    { 
        if (val.GetType().GetProperty(p.Name).GetValue(val, null) == null)
        { 
            //类型 
            if (val.GetType().GetProperties()[i].PropertyType == typeof(System.String))
            {
                val.GetType().GetProperties()[i].SetValue(val, strdefault, null);
            }
          } i++;
     } 
}   

主要是通过反射获得泛型类型的属性及值.就这样.

发表评论

电子邮件地址不会被公开。 必填项已用*标注