2

我有一个任务,我确信可以以简单的方式轻松概括。

我有不同的表要动态导出到 excel,我正在做的是从 Object 参数创建 HTML 中的表列,并使用 List 上的 foreach 来创建行。

因此,例如,如果我有一个 Customer ( List<Customer>) 列表,我会根据 Object 属性的数量和名称创建 tr:

public class Customer
{
    public int DeliveryAddressId { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    ....
}

var output = "<table>";
        output += "<thead>";
        output += "<tr>";
        output += "<th>DeliveryAddressId </th>";
        .....

和 foreach 填充行:

foreach (var customer in List<Customer>)
        {
            output += "<tr>";
            output += "<td>" + customer.DeliveryAddressId + "</td>";
            .....

但是后来我有不同参数的不同对象,所以问题是:

如何创建一个以 aList<Object>作为输入的通用方法,并使用对象参数名称作为列名创建这种表,然后相应地循环行?

4

1 回答 1

4

如果您创建一个接受列表的泛型方法T

public string DumpToTable<T>(List<T> list) {
}

您可以像这样枚举 T 上的所有公共属性:

var props = typeof(T).GetProperties(BindingFlags.Public);

根据您的用例,您可能希望.GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);过滤掉继承的成员。

对于每个PropertyInfo元素,您可以.Name在生成标题时访问它们的 , 。

之后,遍历列表,您必须调用它们的相关.GetValue方法:

foreach(T item in list) {
    string line = "";
    foreach(PropertyInfo prop in props) {
         line += string.Format("<td>{0}</td>", prop.GetValue(item));
    }
    output += string.Format("<tr>{0}</tr>", line);
}
于 2012-11-13T12:11:25.320 回答