Obecnie ustawiam wszystkie wartości mojego obiektu klasy Record
.
To jest kod, którego używam do zapełnienia rekordu w tej chwili, właściwość według właściwości.
// 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)],
};
}
Czy mogę dynamicznie iterować każdą z właściwości bez twardego kodowania wszystkich nazw właściwości?
Coś takiego:
// 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
Łukasz
źródło
źródło
Odpowiedzi:
Możesz do tego użyć Reflection. O ile rozumiem, możesz wyliczyć właściwości swojej klasy i ustawić wartości. Musisz jednak to wypróbować i upewnić się, że rozumiesz kolejność właściwości. Więcej informacji na temat tego podejścia można znaleźć w tej dokumentacji MSDN .
Dla podpowiedzi możesz zrobić coś takiego:
Gdzie
value
jest wartość, którą chcesz zapisać (czyli z twojejresultItems
tablicy).źródło
źródło
GetProperty
właściwość nie jest dostępna dla mojej instancji klasy. : /nameof(Item.Field)
zamiast tego"itemtype"
unikać twardego kodowania od C # 6.0Tak, można utworzyć indeksator w klasie Record, który odwzorowuje nazwę właściwości na właściwą właściwość. Pozwoliłoby to zachować całe powiązanie od nazwy właściwości do właściwości w jednym miejscu, np .:
Alternatywnie, jak wspominali inni, użyj refleksji.
źródło
Wypróbowałem to, co zasugerował Samuel Slade . Nie działa dla mnie.
PropertyInfo
Lista wracał jako pusty. Więc wypróbowałem następujące i zadziałało.źródło