Cara Memperoleh Pemalar dari mana-mana Jenis Data Menggunakan Refleksi
Persoalan yang menarik adalah untuk menentukan pemalar hadir dalam jenis data tertentu semasa masa jalan . Mari kita siasat bagaimana kita boleh mencapai ini menggunakan prinsip refleksi.
Menyelam ke Alam Pemalar dengan Refleksi
Untuk membongkar misteri memperoleh pemalar, kami menggunakan kaedah berani yang disediakan oleh senjata refleksi. Refleksi membolehkan kita meneliti dan memanipulasi jenis, membolehkan kita mengeluarkan permata tersembunyi yang mereka pegang.
Panduan Teladan untuk Menyingkap Pemalar
Untuk memulakan pengembaraan ini, kami menyediakan rutin teladan yang menyelidiki inti bagi mana-mana jenis tertentu dan mengekstraknya yang tidak berubah pemalar:
private FieldInfo[] GetConstants(System.Type type) { // Initialize an assembly of constants ArrayList constants = new ArrayList(); // Summon an army of field explorers to unearth all public, static gems FieldInfo[] fieldInfos = type.GetFields( // Command the retrieval of public and static fields BindingFlags.Public | BindingFlags.Static | // Extend the search to the depth of base types BindingFlags.FlattenHierarchy); // Patrol through the reconnaissance report, enlisting only the immutable constants foreach(FieldInfo fi in fieldInfos) // Assess if the field's value is immutable and endures from compile-time // Exclude any field that can be tampered with in the constructor if(fi.IsLiteral && !fi.IsInitOnly) constants.Add(fi); // Formulate an array of FieldInfos holding the unearthed constants return (FieldInfo[])constants.ToArray(typeof(FieldInfo)); }
Merangkul Generik dan LINQ untuk Sentuhan Menggilap
Pendekatan yang disebutkan di atas boleh diperhalusi lagi dengan keanggunan generik dan kuasa LINQ. Transformasi ini memberi kami asas kod yang lebih bersih dan ringkas:
private List<FieldInfo> GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); }
Sebuah Strok Kesederhanaan
Berusaha untuk minimalism, kami memendekkan pendekatan yang diperhalusi ini menjadi ringkas- liner:
type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
Berbekalkan senjata teknik ini, anda kini diberi kuasa untuk mendedahkan rahsia yang tersembunyi di dalam hati mana-mana jenis data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Pemalar Mana-mana Jenis Data Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!