Ya, Refleksi akan menjadi cara untuk pergi. Pertama, Anda akan mendapatkanType
yang mewakili tipe (saat runtime) dari instance dalam daftar. Anda dapat melakukan ini dengan memanggil GetType
metodeObject
. Karena ada di Object
kelas, itu bisa dipanggil oleh setiap objek di .NET, karena semua jenis berasal dari Object
( well, secara teknis, bukan segalanya , tapi itu tidak penting di sini).
Setelah Anda memiliki Type
instance, Anda dapat memanggil GetProperties
metode untuk mendapatkan PropertyInfo
instance yang mewakili informasi run-timea tentang properti diType
.
Catatan, Anda dapat menggunakan kelebihan GetProperties
untuk membantu mengklasifikasikan mana sifat Anda mengambil.
Dari sana, Anda hanya akan menulis informasi ke file.
Kode Anda di atas, diterjemahkan, akan menjadi:
// The instance, it can be of any type.
object o = <some object>;
// Get the type.
Type type = o.GetType();
// Get all public instance properties.
// Use the override if you want to classify
// which properties to return.
foreach (PropertyInfo info in type.GetProperties())
{
// Do something with the property info.
DoSomething(info);
}
Perhatikan bahwa jika Anda menginginkan informasi metode atau informasi bidang, Anda harus memanggil salah satu dari kelebihan GetMethods
atau GetFields
metode masing-masing.
Juga perhatikan, itu satu hal untuk daftar anggota ke file, tetapi Anda tidak harus menggunakan informasi ini untuk mendorong logika berdasarkan set properti.
Dengan asumsi Anda memiliki kontrol atas implementasi tipe, Anda harus berasal dari kelas dasar umum atau mengimplementasikan antarmuka umum dan membuat panggilan pada mereka (Anda dapat menggunakan as
atauis
operator untuk membantu menentukan kelas dasar / antarmuka mana Anda bekerja dengan di runtime).
Namun, jika Anda tidak mengontrol definisi tipe ini dan harus menggerakkan logika berdasarkan pencocokan pola, maka itu tidak masalah.