首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么使泛型的参数是通用的

2012-09-10 
如何使泛型的参数是通用的?比如如下的函数,编译会报错,说找不到T,但我传参时是需要不同的实体类的名称的比

如何使泛型的参数是通用的?
 
比如如下的函数,编译会报错,说找不到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;
  }


[解决办法]

探讨
比如如下的函数,编译会报错,说找不到T,但我传参时是需要不同的实体类的名称的

[解决办法]
败给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)
[解决办法]
探讨

还是使用ArrayList,泛型必须使用指定类型。

[解决办法]
同意楼上的看法
探讨

败给lz了,这回真的不知道你要做什么了。理解泛型本身比理解lz的想法简单多了。

[解决办法]
只是个语法错误:
public static DataTable FillDataTable(List<T> modelList) 中少了FillDataTable<T>
不过你这里用不用泛型没啥差别吧,你不如用object好了。
[解决办法]
有点不太明白,为什么不能用object呢?

热点排行