Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan Parameter Jenis Senarai Generik Kosong dalam C#?
Bagaimana untuk menentukan jenis parameter Senarai generik
Apabila menggunakan refleksi dan memanipulasi koleksi, adalah penting untuk menentukan parameter jenis Senarai generik
Kod asal dengan masalah
Pertimbangkan kod berikut:
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,如何获取类型? } }
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
Kod diubah suai
Type type = pi.PropertyType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type itemType = type.GetGenericArguments()[0]; // 这将给出类型 }
Mengendalikan antara muka bukan Senarai
Untuk sokongan yang lebih umum untuk pelbagai jenis melaksanakan IList
foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 注意此处使用 interfaceType // 对项目类型执行某些操作... } }
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!