Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Jenis `T` Senarai Generik Kosong dalam 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:
<code class="language-csharp">List<myclass> myList = dataGenerator.getMyClasses(); lbxObjects.ItemsSource = myList; lbxObjects.SelectionChanged += lbxObjects_SelectionChanged;</code>
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:
<code class="language-csharp">// 如果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... }</code>
Sebagai alternatif, untuk sokongan yang lebih komprehensif, anda boleh menyemak antara muka yang dilaksanakan oleh jenis ini:
<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 对itemType执行某些操作... break; } }</code>
Dengan kaedah ini, anda boleh menentukan T
jenis 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!