C# クラスプロパティを反復処理する 質問する

C# クラスプロパティを反復処理する 質問する

現在、クラスオブジェクトのすべての値を設定していますRecord

これは、現在プロパティごとにレコードを入力するために使用しているコードです。

// Loop through each field in the result set
for (int i = 0; i <= resultItems.Length; i++)
{

    Record newRecord = new Record()
    {
            itemtype =   resultItems[i - (fieldCount - 0)],
            itemdesc =   resultItems[i - (fieldCount - 1)],
            prodcode =   resultItems[i - (fieldCount - 2)],
            proddesc =   resultItems[i - (fieldCount - 3)],
            curstat =    resultItems[i - (fieldCount -4)],
            totfree =    resultItems[i - (fieldCount -5)],
            totphys =    resultItems[i - (fieldCount -6)],
            pcolgroup =  resultItems[i - (fieldCount -7)],
            scolgroup =  resultItems[i - (fieldCount -8)],
            totpo =      resultItems[i - (fieldCount - 9)],
            totso =      resultItems[i - (fieldCount - 10)],
            quality =    resultItems[i - (fieldCount - 11)],
            statusdesc = resultItems[i - (fieldCount - 12)],
            groupcode =  resultItems[i - (fieldCount - 13)],
            qualitydes = resultItems[i - (fieldCount - 14)],
            pcoldesc =   resultItems[i - (fieldCount - 15)],
            scoldesc =   resultItems[i - (fieldCount - 16)],
            pgroupdesc = resultItems[i - (fieldCount - 17)],
    };
}

すべてのプロパティ名をハードコーディングせずに、各プロパティを動的に反復処理できますか?

次のようなものです:

// Create new Record instance
Record newRecord = new Record();

for (int e = 0; e < propertyCount.Length - 1; e++)
{
    newRecord[fieldname] = resultItems[i - (fieldCount - e)];
}

ベストアンサー1

リフレクションを使ってこれを行うこともできます。私が理解している限りでは、クラスのプロパティを列挙して値を設定できます。ただし、これを試してみて、プロパティの順序を理解していることを確認する必要があります。これを参照してください。MSDN ドキュメントこのアプローチの詳細については、こちらをご覧ください。

ヒントとしては、次のようなことが考えられます。

Record record = new Record();

PropertyInfo[] properties = typeof(Record).GetProperties();
foreach (PropertyInfo property in properties)
{
    property.SetValue(record, value);
}

value書き込みたい値はどこにありますか (つまり、resultItems配列から)。

おすすめ記事