Apakah ada cara di C # di mana saya bisa menggunakan refleksi untuk mengatur properti objek?
Ex:
MyObject obj = new MyObject();
obj.Name = "Value";
Saya ingin mengatur obj.Name
dengan refleksi. Sesuatu seperti:
Reflection.SetProperty(obj, "Name") = "Value";
Apakah ada cara untuk melakukan ini?
c#
.net
reflection
properties
Melursus
sumber
sumber
var val = Convert.ChangeType(propValue, propInfo.PropertyType);
sumber: devx.com/vb2themax/Tip/19599obj.GetType().GetProperty("Name")?.GetSetMethod()?.Invoke(...)
CanWrite=False
tipe, kan?Anda juga dapat melakukan:
di mana target adalah objek yang akan menetapkan propertinya.
sumber
Refleksi, pada dasarnya, yaitu
atau ada perpustakaan untuk membantu dalam hal kenyamanan dan kinerja; misalnya dengan FastMember :
(yang juga memiliki keuntungan karena tidak perlu tahu sebelumnya apakah itu bidang vs properti)
sumber
Atau Anda bisa membungkus satu liner Marc di dalam kelas ekstensi Anda sendiri:
dan menyebutnya seperti ini:
Untuk ukuran yang baik, mari tambahkan metode untuk mendapatkan nilai properti:
sumber
Ya, menggunakan
System.Reflection
:sumber
Gunakan sesuatu seperti ini:
atau
sumber
Anda juga dapat mengakses bidang menggunakan cara yang sama:
Dengan refleksi semuanya bisa menjadi buku terbuka :) Dalam contoh saya, kami mengikat bidang tingkat instance pribadi.
sumber
Anda dapat mencoba ini ketika Anda ingin menetapkan properti Obyek secara massal dari Objek lain menggunakan nama Properti:
sumber
Saya baru saja menerbitkan paket Nuget yang memungkinkan pengaturan tidak hanya Properti tingkat pertama tetapi juga properti bersarang di objek yang diberikan secara mendalam.
Ini paketnya
Menetapkan nilai properti suatu objek berdasarkan pathnya dari root.
Objek dapat berupa objek kompleks dan properti dapat berupa properti bersarang multi level atau dapat berupa properti langsung di bawah root.
ObjectWriter
akan menemukan properti menggunakan parameter jalur properti dan memperbarui nilainya. Path properti adalah nama tambahan dari properti yang dikunjungi dari root ke properti simpul akhir yang ingin kita atur, dibatasi oleh parameter string pembatas.Pemakaian:
Untuk mengatur properti langsung di bawah root objek:
Yaitu.
LineItem
kelas memiliki properti int yang disebutItemId
Untuk menyiapkan properti bersarang beberapa level di bawah root objek:
Yaitu.
Invite
kelas memiliki properti yang disebutState
, yang memiliki properti yang disebutInvite
(tipe Undang), yang memiliki properti yang disebutRecipient
, yang memiliki properti yang disebutId
.Untuk membuat segala sesuatunya lebih kompleks,
State
properti itu bukan tipe referensi, itu adalahstruct
.Di sini adalah bagaimana Anda dapat mengatur properti Id (ke nilai string "pandangan") di bagian bawah pohon objek dalam satu baris.
sumber
Berdasarkan saran MarcGravell, saya telah membangun metode statis berikut. Metode ini secara umum menetapkan semua properti yang cocok dari objek sumber ke target menggunakan FastMember
sumber