Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Jenis `T` Senarai Generik Kosong dalam C#?

Bagaimanakah Saya Boleh Menentukan Jenis `T` Senarai Generik Kosong dalam C#?

Susan Sarandon
Lepaskan: 2025-01-08 18:47:41
asal
519 orang telah melayarinya

How Can I Determine the Type `T` of an Empty Generic List in C#?

Senarai generik C#List<T>: Tentukan jenis T

Dalam C#, senarai generik membolehkan anda menyimpan elemen jenis tertentu. Tetapi bagaimana jika anda perlu menentukan jenis T senarai generik kosong?

Pertimbangkan senario berikut:

List<myclass> myList = dataGenerator.getMyClasses();
lbxObjects.ItemsSource = myList;
lbxObjects.SelectionChanged += lbxObjects_SelectionChanged;
Salin selepas log masuk

Dalam acara lbxObjects_SelectionChanged, anda menggunakan refleksi untuk mendapatkan maklumat tentang sifat objek yang dipilih. Untuk senarai generik (List<T>), anda ingin mendapatkan jenis elemen yang dipegangnya.

Untuk ini anda boleh menggunakan kaedah GetGenericType, kaedah ini berfungsi jika senarai mengandungi elemen. Walau bagaimanapun, kaedah ini gagal apabila senarai kosong. Untuk mengatasi masalah ini, anda perlu mengakses maklumat jenis sama ada ada elemen atau tidak.

Penyelesaian terletak pada menyemak jenis atribut yang disimpan dalam pi.PropertyType. Berikut ialah kod yang diubah suai:

// 如果List<T>包含一个或多个元素,则此方法有效。
Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null));

// 如果列表为空,使用以下方法获取T的类型
Type type = pi.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
{
    Type itemType = type.GetGenericArguments()[0];
    // 在此处使用itemType...
}
Salin selepas log masuk

Sebagai alternatif, untuk sokongan yang lebih komprehensif, anda boleh menyemak antara muka yang dilaksanakan oleh jenis ini:

foreach (Type interfaceType in type.GetInterfaces())
{
    if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>))
    {
        Type itemType = interfaceType.GetGenericArguments()[0];
        // 对itemType执行某些操作...
        break;
    }
}
Salin selepas log masuk

Dengan kaedah ini, anda boleh menentukan Tjenis senarai generik dengan berkesan, tidak kira sama ada senarai itu mengandungi sebarang unsur.

Output yang disemak ini mengekalkan imej asal dan memperbaik pemformatan kod untuk kebolehbacaan yang lebih baik. penjelasannya.List<>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Jenis `T` Senarai Generik Kosong 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