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