1

私はこのコードを持っています。オブジェクトのリストに挿入するパラメーターとして、いくつかのリストを受け取ります。

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 
    };
}

次に、のすべてのリストを実行しList(object) listObj、それらをデータテーブルに変換して、各データテーブルの各リストのコンテンツを追加するforeachがあります。

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++;
}

次に、datatableメソッドに変換します。

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;
}   

問題は、ListlistObj内の各リストのプロパティを取得していないということです。List<Receivables> genRecListではList<Dilution> genDilList、 どうすればList<Accountable> genAccList、、、、プロパティにアクセスできList<Outstanding> genOutListますか?

私は以前にこれを行っていましたがList(T)、一度に1つのリストを使用して、機能しました。今、それは混乱です。

4

2 に答える 2

0

あなたTypeがクラスTを取得したい場合List<T>

var list = new List<T>();
var typeT = list.GetType().GenericTypeArguments.First();

したがって、コードを変更する必要があります。

PropertyInfo[] p =  genList.GetType().GenericTypeArguments
                           .First().GetProperties();
于 2012-08-19T14:42:15.637 に答える
0

あなたは自分自身を必要以上に難しくしているように私には思えます。あなたはあなたがタイプを知っているリストから始めます。次に、それらをわかりにくいリストの山に投げ込むと、型情報が埋もれてしまい、もう一度掘り下げるのに苦労します。

これを修正する方法は?

基本的に、1つで2つDataTableのことを行います。を作成してExcelに書き込みます。これらの懸念を分離するのに役立ちます。これはどうですか:

  • メソッドDataTable ConvertListToDataTable<T>(List<T>)を作成し、ジェネリック型パラメーターを使用して'sTを取得しますPropertyInfo
  • リストごとにこのメソッドを個別に呼び出し、データテーブルをリストに入れます。
  • その後、次のようなことをしますSaveDataTablesToSeparateFiles(List<DataTable> tables, string excelFile, string typeReport)
于 2012-08-19T20:05:15.833 に答える