Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menggunakan kaedah generik dalam C# dengan parameter jenis dinamik semasa runtime?
c#Jalankan parameter jenis dinamik kaedah Scrang generik
Apabila menggunakan kaedah generik dalam C#, kadang -kadang parameter jenis tidak diketahui semasa menyusun, dan mesti diperoleh pada runtime. Artikel ini membincangkan amalan terbaik untuk memanggil kaedah generik dalam kes ini.
Pertimbangkan contoh kod berikut, di mana
kaedah cuba menggunakan parameter jenis yang diperoleh dari pembolehubah runtime untuk memanggil kaedah generik Example
. myType
GenericMethod<T>
<code class="language-csharp">public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); GenericMethod<myType>(); // 这行代码无法编译通过 StaticMethod<myType>(); // 这行代码也无法编译通过 } public void GenericMethod<T>() { // ... } public static void StaticMethod<T>() { // ... } }</code>secara langsung, kerana pengkompil tidak dapat menyimpulkan parameter jenis semasa penyusunan. Untuk menyelesaikan masalah ini, kita perlu menggunakan refleksi untuk mendapatkan kaedah, dan kemudian menggunakan parameter jenis yang diperlukan untuk "membina" itu.
GenericMethod<myType>
Kaedah
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod)); MethodInfo generic = method.MakeGenericMethod(myType); generic.Invoke(this, null);</code>menggunakan parameter jenis yang ditentukan untuk membina spesifikasi kaedah generik. Akhirnya, digunakan untuk memanggil kaedah generik pembina.
GetMethod
untuk kaedah statik, MakeGenericMethod
lulus Invoke
sebagai parameter pertama untuk
null
Dalam C# 4 dan versi yang lebih tinggi, jika kesimpulan jenis mungkin, panggilan dinamik boleh digunakan untuk memudahkan proses ini, tetapi ini tidak selalu berlaku. Penyelesaian yang disediakan oleh refleksi masih merupakan kaedah yang boleh dipercayai untuk memanggil kaedah generik menggunakan parameter jenis dinamik. Invoke
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan kaedah generik dalam C# dengan parameter jenis dinamik semasa runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!