В настоящее время я устанавливаю все значения своего объекта класса 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)];
}
c#
properties
loops
Люк
источник
источник
Ответы:
Вы могли бы использовать для этого Reflection. Насколько я понимаю, вы можете перечислить свойства своего класса и установить значения. Вам нужно будет попробовать это и убедиться, что вы понимаете порядок свойств. Обратитесь к этой документации MSDN для получения дополнительной информации об этом подходе.
В качестве подсказки вы могли бы сделать что-то вроде:
Где
value
значение, которое вы хотите записать (например, из вашегоresultItems
массива).источник
источник
GetProperty
свойство недоступно для моего экземпляра класса. : /nameof(Item.Field)
вместо того,"itemtype"
чтобы избежать жесткого кодирования,Да, вы можете создать индексатор для своего класса Record, который сопоставляет имя свойства с правильным свойством. Это сохранит всю привязку имени свойства к свойству в одном месте, например:
В качестве альтернативы, как уже упоминалось, используйте отражение.
источник
Я попробовал то, что предложил Сэмюэл Слейд . У меня не сработало.
PropertyInfo
Список придет как пустые. Итак, я попробовал следующее, и у меня это сработало.источник