Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Dapatkan Semua Pemalar Jenis Menggunakan Refleksi dalam C#?

Bagaimanakah Saya Boleh Dapatkan Semua Pemalar Jenis Menggunakan Refleksi dalam C#?

Susan Sarandon
Lepaskan: 2025-01-03 19:38:41
asal
375 orang telah melayarinya

How Can I Retrieve All Constants of a Type Using Reflection in C#?

Mengambil Pemalar Jenis Menggunakan Refleksi

Untuk mendapatkan semua pemalar yang diisytiharkan dalam jenis tertentu, pantulan boleh digunakan. Teknik berikut menyediakan penyelesaian kepada masalah ini:

Pendekatan tradisional melibatkan mendapatkan semula medan jenis menggunakan kaedah GetFields(). Dengan menapis medan bukan malar berdasarkan sifat IsLiteral dan IsInitOnly, medan malar boleh diasingkan. Berikut ialah contoh pelaksanaan:

private FieldInfo[] GetConstants(System.Type type)
{
    ArrayList constants = new ArrayList();

    FieldInfo[] fieldInfos = type.GetFields(
        // Gets all public and static fields
        BindingFlags.Public | BindingFlags.Static | 
        // This tells it to get the fields from all base types as well
        BindingFlags.FlattenHierarchy);

    // Go through the list and only pick out the constants
    foreach(FieldInfo fi in fieldInfos)
        // IsLiteral determines if its value is written at 
        //   compile time and not changeable
        // IsInitOnly determines if the field can be set 
        //   in the body of the constructor
        // for C# a field which is readonly keyword would have both true 
        //   but a const field would have only IsLiteral equal to true
        if(fi.IsLiteral && !fi.IsInitOnly)
            constants.Add(fi);           

    // Return an array of FieldInfos
    return (FieldInfo[])constants.ToArray(typeof(FieldInfo));
}
Salin selepas log masuk

Untuk penyelesaian yang lebih ringkas, generik dan LINQ boleh digunakan:

private List<FieldInfo> GetConstants(Type type)
{
    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public |
         BindingFlags.Static | BindingFlags.FlattenHierarchy);

    return fieldInfos.Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
}
Salin selepas log masuk

Kaedah ini menyediakan cara yang bersih dan ringkas untuk menapis pemalar.

Sebagai alternatif, penyelesaian satu baris mungkin:

type.GetFields(BindingFlags.Public | BindingFlags.Static |
               BindingFlags.FlattenHierarchy)
    .Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
Salin selepas log masuk

Ini pendekatan menggabungkan semua operasi penapisan menjadi satu ungkapan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Semua Pemalar Jenis Menggunakan Refleksi dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan