Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan Parameter Jenis Senarai Generik Kosong dalam C#?

Bagaimana untuk Menentukan Parameter Jenis Senarai Generik Kosong dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-08 19:06:46993semak imbas

How to Determine the Type Parameter of an Empty Generic List in C#?

Bagaimana untuk menentukan jenis parameter Senarai generik dalam C#

Apabila menggunakan refleksi dan memanipulasi koleksi, adalah penting untuk menentukan parameter jenis Senarai generik. Jika harta itu kosong, mendapatkan jenis boleh menjadi satu cabaran.

Kod asal dengan masalah

Pertimbangkan kod berikut:

<code class="language-csharp">foreach (PropertyInfo pi in lbxObjects.SelectedItem.GetType().GetProperties())
{
    switch (pi.PropertyType.Name.ToLower())
    {
        case "list`1":
            // 如果 List<T> 包含元素,则此方法有效。
            Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null));
            // 但如果值为 null,如何获取类型?
    }
}</code>

Dalam kod ini, kaedah GetGenericType digunakan untuk mendapatkan parameter jenis, tetapi ia memerlukan senarai mengandungi elemen. Bagaimanakah kita boleh mendapatkan semula jenis apabila senarai kosong?

Penyelesaian: Semak jenis atribut

Untuk menyelesaikan masalah ini, kita boleh menyemak pi.PropertyType sendiri. Jika ia jenis generik yang definisinya sepadan dengan Senarai, kita boleh menggunakan GetGenericArguments() untuk mengekstrak parameter jenis.

Kod diubah suai

<code class="language-csharp">Type type = pi.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
{
    Type itemType = type.GetGenericArguments()[0]; // 这将给出类型
}</code>

Mengendalikan antara muka bukan Senarai

Untuk sokongan yang lebih umum untuk pelbagai jenis melaksanakan IList, antara muka boleh diperiksa menggunakan GetInterfaces():

<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces())
{
    if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>))
    {
        Type itemType = interfaceType.GetGenericArguments()[0]; // 注意此处使用 interfaceType
        // 对项目类型执行某些操作...
    }
}</code>

Jawapan yang disemak ini meningkatkan kejelasan dan membetulkan ralat kecil dalam coretan kod akhir Parameter jenis harus diekstrak daripada interfaceType bukan type dalam contoh IList<> dan bukannya List<> dalam semakan definisi jenis generik juga lebih tepat.List

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Parameter Jenis Senarai Generik Kosong dalam C#?. 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