Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengekstrak Pemalar dari Jenis Menggunakan C# Reflection?

Bagaimana untuk Mengekstrak Pemalar dari Jenis Menggunakan C# Reflection?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 19:43:44389semak imbas

How to Extract Constants from a Type Using C# Reflection?

Cara Mengekstrak Pemalar daripada sebarang Jenis Menggunakan Refleksi

Refleksi menyediakan cara yang berkesan untuk memeriksa jenis pada masa jalan. Ini membolehkan anda mendapatkan maklumat tentang sifat jenis, kaedah dan juga pemalarnya.

Untuk mendapatkan semua pemalar jenis menggunakan pantulan, anda boleh menggunakan kaedah GetFields dengan bendera mengikat khusus:

BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy

Bendera ini memastikan anda mendapatkan semula semua medan statik awam yang diisytiharkan pada jenis semasa atau mana-mana pangkalannya jenis.

Selepas mendapatkan semula tatasusunan objek FieldInfo, anda boleh menapisnya untuk memasukkan pemalar sahaja dengan menyemak bendera IsLiteral dan IsInitOnly:

if(fi.IsLiteral && !fi.IsInitOnly)

Bendera IsLiteral menunjukkan bahawa nilai medan ialah ditetapkan pada masa penyusunan, manakala bendera IsInitOnly menunjukkan bahawa medan boleh dimulakan hanya dalam pembina. Untuk pemalar, kedua-dua bendera ini hendaklah benar.

Menggunakan pendekatan ini, anda boleh mengekstrak semua pemalar daripada sebarang jenis dengan cekap menggunakan pantulan:

private List<FieldInfo> GetConstants(Type type)
{
    return type.GetFields(BindingFlags.Public | BindingFlags.Static |
            BindingFlags.FlattenHierarchy)
        .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
}

Kaedah ini mengembalikan senarai objek FieldInfo yang mewakili pemalar yang diisytiharkan dalam jenis yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Pemalar dari Jenis Menggunakan C# Reflection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn