关于泛型集合,和反射该 怎么用呢?
具体的说一 下,我现在遇到的一个问题。我现在定义了这样一个方法
public void ExcelOut(List <T> arr,string path,params string[] headers)
其中怎样通过反射得到 arr的类型呢,因为这是一个commhelper 类,别的类在调用它时都会给它赋上不同的类型 ,而且所赋的类型还都是 一个class 类型,我还想得到里面的字段和方法,是不是通过GetProperties这个方法,求解。关于泛型集合和反射的用法,说的越细越好,有实例更好。谢谢!!
具体的说一 下,我现在遇到的一个问题。我现在定义了这样一个方法
public void ExcelOut(List <T> arr,string path,params string[] headers)
其中怎样通过反射得到 arr的类型呢,因为这是一个commhelper 类,别的类在调用它时都会给它赋上不同的类型 ,而且所赋的类型还都是 一个class 类型,我还想得到里面的字段和方法,是不是通过GetProperties这个方法,求解。关于泛型集合和反射的用法,说的越细越好,有实例更好。谢谢!!
Type t = arr.GetType().GetGenericArguments()[0].MakeGenericType();这样得到的t就是泛型集合中的元素的类型
对泛型进行反射,可以参考我的博客:
http://blog.csdn.net/ojlovecd/article/details/2943968
{
#region NPOI Excel导出功能 +ExcelOut(List<T> arr, string path, List<string> Attries, List<string > headers)
public static void ExcelOut(List<T> arr, string path, List<string> Attries, List<string > headers)
{
try
{
HSSFWorkbook wb = new HSSFWorkbook();//创建一个工作薄
HSSFSheet sheet = wb.CreateSheet();//在工作薄中创建一个工作表
for (int i = 0; i < headers.Count; i++) //循环一个表头来创建第一行的表头
{
HSSFRow rw = sheet.CreateRow(0);
rw.CreateCell(i).SetCellValue(headers[i]);
}
Type t = typeof(T); //获取得泛型集合中的实体, 返回T的类型
PropertyInfo[] properties = t.GetProperties(); //返回当前获得实体后 实体类型中的所有公共属性
for (int i = 0; i < arr.Count; i++)//循环实体泛型集合
{
HSSFRow rw = sheet.CreateRow(i + 1);//创建一个新行,把传入集合中的每条数据创建一行
foreach (PropertyInfo property in properties)//循环得到的所有属性(想要把里面指定的属性值导出到Excel文件中)
{
for (int j = 0; j < Attries.Count;j++ )//循环需要导出属性值 的 属性名
{
string attry = Attries[j];//获得一个需要导入的属性名;
if (string.Compare(property.Name.ToUpper(), attry.ToUpper()) == 0)//如果需要导出的属性名和当前循环实体的属性名一样,
{
object result = property.GetValue(arr[i], null);//获取当前循环的实体属性在当前实体对象(arr[i])的值
rw.CreateCell(j).SetCellValue((result == null) ? string.Empty : result.ToString());//创建单元格并进行赋值
}
}
}
}
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
wb.Write(fs);
}
}
catch (Exception ex)
{ throw new Exception("在导出Excel时文件出错啦=====" + ex.Message);
}
}
#endregion
}