Atualmente estou definindo todos os valores do meu objeto de classe Record
.
Este é o código que estou usando para preencher o registro no momento, propriedade por propriedade.
// 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)],
};
}
Posso iterar em cada uma das propriedades dinamicamente sem codificar permanentemente todos os nomes das propriedades?
Algo assim:
// 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
Lucas
fonte
fonte
Respostas:
Você poderia usar o Reflection para fazer isso. Pelo que entendi, você poderia enumerar as propriedades de sua classe e definir os valores. Você teria que experimentar e certificar-se de que entendeu a ordem das propriedades. Consulte esta documentação do MSDN para obter mais informações sobre essa abordagem.
Para uma dica, você poderia fazer algo como:
Onde
value
está o valor que você deseja escrever (portanto, de seuresultItems
array).fonte
fonte
GetProperty
propriedade não está disponível para minha instância de classe. : /nameof(Item.Field)
vez de"itemtype"
evitar a codificação permanente a partir de C # 6.0Sim, você poderia fazer um indexador em sua classe Record que mapeia do nome da propriedade para a propriedade correta. Isso manteria toda a ligação de nome de propriedade para propriedade em um só lugar, por exemplo:
Como alternativa, como outros mencionaram, use reflexão.
fonte
Tentei o que Samuel Slade sugeriu. Não funcionou para mim. A
PropertyInfo
lista estava vazia. Então, tentei o seguinte e funcionou para mim.fonte