Je mets actuellement toutes les valeurs de mon objet de classe Record
.
C'est le code que j'utilise pour remplir l'enregistrement pour le moment, propriété par propriété.
// 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)],
};
}
Puis-je parcourir chacune des propriétés de manière dynamique sans coder en dur tous les noms de propriété?
Quelque chose comme ça:
// Create new Record instance
Record newRecord = new Record();
for (int e = 0; e < propertyCount.Length - 1; e++)
{
newRecord[fieldname] = resultItems[i - (fieldCount - e)];
}
c#
properties
loops
Luke
la source
la source
Réponses:
Vous pouvez éventuellement utiliser Reflection pour ce faire. Pour autant que je sache, vous pouvez énumérer les propriétés de votre classe et définir les valeurs. Vous devrez essayer ceci et vous assurer de bien comprendre l'ordre des propriétés. Reportez-vous à cette documentation MSDN pour plus d'informations sur cette approche.
Pour un indice, vous pouvez faire quelque chose comme:
Où
value
est la valeur dans laquelle vous souhaitez écrire (donc à partir de votreresultItems
tableau).la source
la source
GetProperty
propriété ne soit pas disponible pour mon instance de classe. : /nameof(Item.Field)
au lieu d'"itemtype"
éviter le codage en dur à partir de C # 6.0Oui, vous pouvez créer un indexeur sur votre classe Record qui mappe du nom de propriété à la propriété correcte. Cela conserverait toute la liaison du nom de la propriété à la propriété en un seul endroit, par exemple:
Sinon, comme d'autres l'ont mentionné, utilisez la réflexion.
la source
J'ai essayé ce que Samuel Slade a suggéré. Cela n'a pas fonctionné pour moi. La
PropertyInfo
liste arrivait comme vide. J'ai donc essayé ce qui suit et cela a fonctionné pour moi.la source