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
358 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!

sumber:php.cn
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