Saya ingin melakukan tes jika suatu objek adalah tipe generik. Saya sudah mencoba yang berikut ini tanpa hasil:
public bool Test()
{
List<int> list = new List<int>();
return list.GetType() == typeof(List<>);
}
Apa yang saya lakukan salah dan bagaimana saya melakukan tes ini?
Saya berasumsi bahwa Anda tidak hanya ingin tahu apakah tipe itu generik, tetapi jika suatu objek adalah instance dari tipe generik tertentu, tanpa mengetahui argumen tipe.
Sayangnya, ini tidak terlalu sederhana. Tidak terlalu buruk jika tipe generiknya adalah kelas (seperti dalam kasus ini) tetapi lebih sulit untuk antarmuka. Berikut kode untuk kelas:
EDIT: Seperti disebutkan dalam komentar, ini dapat berfungsi untuk antarmuka:
Saya memiliki kecurigaan yang menyelinap mungkin ada beberapa kasus tepi canggung di sekitar ini, tetapi saya tidak dapat menemukan satu itu gagal untuk saat ini.
sumber
List<T>
dalam beberapa bentuk atau lainnya. Jika Anda menyertakan antarmuka, itu sangat rumit.IsInstanceOfGenericType
dengan panggilan keIsAssignableFrom
alih-alih operator kesetaraan (==
)?Anda dapat menggunakan kode pendek menggunakan dinamis meskipun ini mungkin lebih lambat dari refleksi murni:
sumber
Ini adalah dua metode ekstensi favorit saya yang mencakup sebagian besar kasus pemeriksaan tipe generik:
Bekerja dengan:
Memiliki kelebihan yang akan 'keluar' dari tipe generik spesifik jika itu mengembalikan true (lihat unit test untuk sampel):
Inilah tes untuk menunjukkan fungsionalitas (dasar):
sumber
sumber