如何使泛型的参数是通用的?
比如如下的函数,编译会报错,说找不到T,但我传参时是需要不同的实体类的名称的
比如FillDataTable(modelList) modelList是名称是DM_GBK的实体类,
如何使List<T> modelList 里的T是通用的?
/// <summary>
/// 实体类转换成DataTable
/// </summary>
/// <param name="modelList">实体类列表</param>
/// <returns></returns>
public static DataTable FillDataTable(List<T> modelList)
{
if (modelList == null || modelList.Count == 0)
{
return null;
}
DataTable dt = CreateData(modelList[0]);
foreach (T model in modelList)
{
DataRow dataRow = dt.NewRow();
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
}
dt.Rows.Add(dataRow);
}
return dt;
}
/// <summary>
/// 根据实体类得到表结构
/// </summary>
/// <param name="model">实体类</param>
/// <returns></returns>
private static DataTable CreateData(T model)
{
DataTable dataTable = new DataTable(typeof(T).Name);
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
}
return dataTable;
}
------解决方案--------------------
------解决方案--------------------败给lz了,这回真的不知道你要做什么了。理解泛型本身比理解lz的想法简单多了。
------解决方案--------------------还是使用ArrayList,泛型必须使用指定类型。
------解决方案--------------------public static DataTable FillDataTable(List<T> modelList)
这个就不对
public static DataTable FillDataTable<T>(List<T> modelList)
看看。
------解决方案--------------------public static DataTable FillDataTable<T>(List<T> modelList)
------解决方案--------------------
------解决方案--------------------同意楼上的看法
------解决方案--------------------只是个语法错误:
public static DataTable FillDataTable(List<T> modelList) 中少了FillDataTable<T>
不过你这里用不用泛型没啥差别吧,你不如用object好了。
------解决方案--------------------有点不太明白,为什么不能用object呢?