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 GetTypemetodeObject . Karena ada di Objectkelas, 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 Typeinstance, Anda dapat memanggil GetPropertiesmetode untuk mendapatkan PropertyInfoinstance yang mewakili informasi run-timea tentang properti diType .
Catatan, Anda dapat menggunakan kelebihan GetPropertiesuntuk 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 GetFieldsmetode 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.