Saat ini saya menyetel semua nilai objek kelas saya Record
.
Ini adalah kode yang saya gunakan untuk mengisi record saat ini, properti demi properti.
// 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)],
};
}
Dapatkah saya melakukan iterasi melalui setiap properti secara dinamis tanpa hard coding semua nama properti?
Sesuatu seperti itu:
// 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
sumber
sumber
Jawaban:
Anda mungkin bisa menggunakan Refleksi untuk melakukan ini. Sejauh yang saya pahami, Anda dapat menghitung properti kelas Anda dan menetapkan nilainya. Anda harus mencobanya dan memastikan Anda memahami urutan propertinya. Lihat Dokumentasi MSDN ini untuk informasi lebih lanjut tentang pendekatan ini.
Sebagai petunjuk, Anda mungkin bisa melakukan sesuatu seperti:
Di mana
value
nilai yang ingin Anda tulis (jadi dariresultItems
array Anda ).sumber
sumber
GetProperty
properti tidak tersedia untuk instance kelas saya. : /nameof(Item.Field)
alih-alih"itemtype"
menghindari pengkodean keras pada C # 6.0Ya, Anda bisa membuat pengindeks di kelas Record Anda yang memetakan dari nama properti ke properti yang benar. Ini akan membuat semua pengikatan dari nama properti ke properti di satu tempat misalnya:
Sebagai alternatif, seperti yang disebutkan orang lain, gunakan refleksi.
sumber
Saya mencoba apa yang disarankan Samuel Slade . Tidak berhasil untuk saya. The
PropertyInfo
daftar datang sebagai kosong. Jadi, saya mencoba yang berikut dan berhasil untuk saya.sumber