我有这个代码。我收到几个列表作为参数插入对象列表。
public static void SaveTransactionsToSeparateFiles(List<Receivables> genRecList,
List<Dilution> genDilList, List<Accountable> genAccList, string excelFile,
string typeReport, List<Outstanding> genOutList = null)
{
List<object> listObj = new List<object>
{
genRecList,
genDilList,
genAccList,
genOutList
};
}
然后我有一个foreach,我遍历List(object) listObj
中的所有列表,将它们转换为数据表并添加每个数据表中每个列表的内容。
foreach (var obj in listObj)
{
DataTable genTable = HelperMethods.ConvertListToDataTable(obj, true);
Worksheet pantaReiWorkSheet = pantaReiWorkSheets[sheet.SheetName];
int iRow = 0;
foreach (DataRow row in genTable.Rows)
{
iRow++;
int iCol = 0;
foreach (DataColumn col in genTable.Columns)
{
iCol++;
pantaReiWorkSheet.Cells[iRow + 1, iCol] = row[col.ColumnName];
}
}
i++;
}
然后我将转换为数据表方法。
public static DataTable ConvertListToDataTable(object genList, bool toExcel)
{
DataTable genDt = new DataTable();
PropertyInfo[] p = p.genList.GetType().GetProperties();
for (int prop = 1; prop < p.Length - 2; prop++)
{
genDt.Columns.Add(new DataColumn(p[prop].Name, p[prop].PropertyType));
}
foreach (object t in (IEnumerable<object>)genList)
{
DataRow genDR = genDt.NewRow();
for (int prop = 1; prop < p.Length - 2; prop++)
{
genDR[p[prop].Name] = p[prop].GetValue(t, null);
}
genDt.Rows.Add(genDR);
}
return genDt;
}
问题是,我没有在List listObj中查找每个列表的属性。
那么,我如何访问List<Receivables> genRecList
,List<Dilution> genDilList
,
List<Accountable> genAccList
,List<Outstanding> genOutList
属性??
之前我已经完成了这项工作,但是List(T)
和一次只有一个列表并且有效。现在一团糟。
答案 0 :(得分:0)
如果您想在Type
中获得T
课程List<T>
:
var list = new List<T>();
var typeT = list.GetType().GenericTypeArguments.First();
所以你的代码应该改变:
PropertyInfo[] p = genList.GetType().GenericTypeArguments
.First().GetProperties();
答案 1 :(得分:0)
在我看来,你自己比必要时更难。您从列表中了解其中的类型。然后你将它们扔进一堆不起眼的清单中,类型信息被埋没了,你给自己很难再把它挖出来。
如何解决此问题?
基本上,你要做两件事:创建DataTable
并将它们写入Excel。这有助于区分这些问题。那怎么样:
DataTable ConvertListToDataTable<T>(List<T>)
并使用泛型类型参数T
获取PropertyInfo
的SaveDataTablesToSeparateFiles(List<DataTable> tables, string excelFile, string typeReport)