2

簡単な方法で簡単に一般化できると確信しているタスクがあります。

Excel に動的にエクスポートするさまざまなテーブルがあり、オブジェクト パラメーターから HTML でテーブル列を作成し、リストで foreach を使用して行を作成しています。

たとえば、Customer ( List<Customer>) のリストがある場合、オブジェクト プロパティの量と名前に基づいて 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>";
            .....

しかし、その後、さまざまなパラメーターを持つさまざまなオブジェクトがあるため、問題は次のとおりです。

List<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 に答える