一个属性上没有加Get Set 导致的数据丢失问题

今天在调试程序时,发现了一个奇怪的问题,更新数据后会导致数据丢失,经检查是没有加GetSet导致

1.DataTable转List代码

public static List<T> DtToList<T>(this DataTable dt) where T : class, new()
{
       //属性列表
       List<System.Reflection.PropertyInfo> ls_pro = new List<System.Reflection.PropertyInfo>();
    Type t = typeof(T);
       //把T里所有public属性字段和dt列名一样的放进ls_pro属性列表存放
       Array.ForEach<System.Reflection.PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) ls_pro.Add(p); });
       List<T> ls_t = new List<T>();
       foreach (DataRow dr in dt.Rows)
       {
           T ob = new T();
           //遍历出属性列表里字段在dt里的值(非空即为有值)
           ls_pro.ForEach(p => { if (dr[p.Name] != DBNull.Value) p.SetValue(ob, dr[p.Name], null); });
            ls_t.Add(ob);
       }
       return ls_t;
 }
public class Test
{
   public int hashcode = 0;
       
}
static void Main(string[] args)
{
      DataTable dataTable = new DataTable();
      dataTable.Columns.Add("aaa", typeof(int));
      DataRow dataRow = dataTable.NewRow();
      dataRow["aaa"] = -187979347;
      dataTable.Rows.Add(dataRow);
     var v1 = DTConvert.DtToList<Test>(dataTable);
}

当定义的属hashcode中没有加get,set时就会导致转后后hashcode为0.如果加上就正常了.但是要注意,依赖于该Model的程序要重新编译,不然会提示找不到该属性问题.

 

posted @ 2020-07-21 17:30  zhaogaojian  阅读(420)  评论(0编辑  收藏  举报