当前位置:  开发笔记 > 编程语言 > 正文

接受List <T>的通用方法

如何解决《接受List<T>的通用方法》经验,为你挑选了1个好方法。

我有5个类,代表一行数据网格.所有这些类都继承自CoreGrid的抽象类.

我有一个导出机制,它使用反射来确定要导出的列.在这一刻,我有一种方法用于每种类型的网格(ExportOrganisations,ExportPeople,ExportEvents)但是这很糟糕,因为它们之间唯一不同的是它查找类型的部分.示例代码如下所示:

public string ExportEvents(List 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的列表?



1> Stecya..:
public string ExportEvents(List events) where T : CoreGrid
{
    DataTable report = new DataTable();

    Type t = typeof(T);

    //your magic here
}

然后使用

var result = ExportEvents(eventList);

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有