一个属性上没有加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的程序要重新编译,不然会提示找不到该属性问题.
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。