天天看點

泛型 DataTable轉實體

如果泛型T 建立執行個體 時提示沒有new()限制,無法建立執行個體請确認類後面添加 where T : new() 代碼第一個行末尾

public class Class2<T> where T : new()
    {
        /// <summary>
        /// DataTable轉實體
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public List<T> GetList(DataTable dt)
        {
            List<T> modelList = new List<T>();
            //循環行
            foreach (DataRow dr in dt.Rows)
            {                
                T model = new T();
                //循環列
                for (int i = ; i < dr.Table.Columns.Count; i++)
                {
                    //model與列名稱字段是否可以對應  propertyInfo相當于字段
                    PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);              
                    if (propertyInfo != null && dr[i] != DBNull.Value)
                        //指派
                        propertyInfo.SetValue(model, dr[i], null);
                }
                modelList.Add(model);
            }
            return modelList;
        }

    }