Senarai generik C# dan pemerolehan maklumat jenis
Mekanisme pantulan dalam pengaturcaraan berorientasikan objek membolehkan pembangun memeriksa struktur dan tingkah laku jenis pada masa jalan. Apabila menggunakan koleksi generik (seperti List<T>
), jenis parameter generik T
perlu diambil untuk mengakses atau mencipta objek jenis itu.
Andaikan anda mempunyai objek yang mengandungi sifat SomList
bernama List<SomeClass>
. Bagaimana untuk menentukan jenis SomList
dalam senarai generik jika T
kosong?
Mari kita analisis contoh kod untuk menjawab soalan ini:
<code class="language-csharp">// 假设 "GetListType" 是您用来检索类型的函数。 private Type GetListType(object myObject) { Type type = myObject.GetType(); if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type[] typeArguments = type.GetGenericArguments(); Type itemType = typeArguments[0]; // 这是泛型列表参数 `T` 的类型。 return itemType; } throw new ArgumentException("对象不包含泛型列表属性。"); }</code>
Dalam kod yang dipertingkatkan ini, kami mencipta kaedah bernama GetListType
yang menerima objek sebagai input dan mengembalikan jenis T
jika objek mengandungi sifat senarai generik kosong.
Kaedah ini menggunakan pantulan untuk menentukan sama ada jenis objek adalah jenis generik dan sama ada definisi generik sepadan dengan jenis List<>
. Jika syarat ini dipenuhi, kod mendapatkan semula parameter jenis (dalam kes ini hanya terdapat satu parameter jenis) dan mengembalikannya sebagai jenis T
.
Perlu ambil perhatian bahawa kod ini bergantung pada nilai hartanah yang boleh diakses (bukan nol). Dalam senario anda, jika SomList
kosong, anda mungkin mahu menyemak nilai nol dan mengendalikannya dengan sewajarnya.
Respons yang disemak ini mengekalkan imej asal dan meningkatkan kejelasan dan aliran penjelasan, menangani masalah teras menentukan jenis T
walaupun semasa senarai kosong Perubahan utama adalah dalam mengendalikan definisi jenis List<>
lebih tepat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Jenis T dalam Senarai Generik Kosong dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!