C#迭代Class属性

Luk*_*uke 104 c# loops properties

我正在设置我的类对象的所有值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)],
    };
}
Run Code Online (Sandbox Code Playgroud)

我可以动态地遍历每个属性而无需对所有属性名称进行硬编码吗?

像这样的东西:

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

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

Sam*_*ade 197

您可以使用Reflection来执行此操作.据我所知,您可以枚举类的属性并设置值.您必须尝试这一点,并确保您了解属性的顺序.有关此方法的详细信息,请参阅此MSDN文档.

提示,您可以执行以下操作:

Record record = new Record();

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

value您想要写入的值在哪里(因此从您的resultItems数组中).

  • 这绝对是救星——谢谢!我正在迭代所有类属性以检查我是否有一个值(在将其写入 XML 之前) (3认同)

jga*_*fin 17

// the index of each item in fieldNames must correspond to 
// the correct index in resultItems
var fieldnames = new []{"itemtype", "etc etc "};

for (int e = 0; e < fieldNames.Length - 1; e++)
{
    newRecord
       .GetType()
       .GetProperty(fieldNames[e])
       .SetValue(newRecord, resultItems[e]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这看起来不错,但我希望动态地执行此操作,而不是对其中的字段名称进行硬编码。这可能吗?谢谢 (2认同)