我有5个类,分别代表数据网格的一行。所有这些类都继承自CoreGrid的抽象类。
我有一个导出机制,它使用反射来确定要导出的列。目前,我为每种类型的网格(ExportOrganisations、ExportPeople、ExportEvents)编写了一个方法,但这很糟糕,因为它们之间唯一不同的是查找类型的部分。下面是示例代码:
我的问题是,我该如何将这些方法压缩成一个方法,让该方法接受一个从CoreGrid继承的列表?
我有一个导出机制,它使用反射来确定要导出的列。目前,我为每种类型的网格(ExportOrganisations、ExportPeople、ExportEvents)编写了一个方法,但这很糟糕,因为它们之间唯一不同的是查找类型的部分。下面是示例代码:
public string ExportEvents(List<EventGrid> events)
{
DataTable report = new DataTable();
EventGrid ev = new EventGrid();
Type t = ev.GetType();
PropertyInfo[] props = t.GetProperties();
foreach (PropertyInfo prop in props)
{
if (!prop.Name.Contains("ID"))
{
report.Columns.Add(prop.Name);
}
}
foreach (var item in events)
{
DataRow dr = report.NewRow();
Type itemType = item.GetType();
PropertyInfo[] itemProps = itemType.GetProperties();
foreach (PropertyInfo prop in itemProps)
{
if (report.Columns.Contains(prop.Name))
{
if (prop.GetValue(item, null) != null)
{
dr[prop.Name] = prop.GetValue(item, null).ToString().Replace(",", string.Empty);
}
}
}
report.Rows.Add(dr);
}
return GenerateCSVExport(report, ExportType.Events);
}
我的问题是,我该如何将这些方法压缩成一个方法,让该方法接受一个从CoreGrid继承的列表?