Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggunakan Jenis Pembolehubah sebagai Parameter dalam Kaedah Generik C#?
Menggunakan jenis pembolehubah sebagai parameter dalam kaedah generik C#
Generik dalam C# menyediakan cara untuk mencipta kaedah dan kelas yang fleksibel yang boleh beroperasi pada jenis data yang berbeza tanpa perlu melaksanakan pelaksanaan berasingan untuk setiap jenis. Walau bagaimanapun, menggunakan jenis pembolehubah sebagai parameter dalam kaedah generik boleh mencabar, terutamanya jika jenis itu tidak diketahui pada masa penyusunan.
Pertimbangkan kaedah generik berikut:
<code class="language-csharp">bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;</code>
Kaedah ini menyemak sama ada entiti wujud berdasarkan GUID dan transaksinya. Untuk menggunakan kaedah ini, jenis entiti perlu diketahui pada masa penyusunan. Ini biasanya dilakukan dengan menyatakan secara eksplisit parameter jenis apabila memanggil kaedah, seperti ini:
<code class="language-csharp">DoesEntityExist<MyType>(entityGuid, transaction);</code>
Walau bagaimanapun, kami tidak boleh menggunakan kaedah di atas jika jenis entiti hanya diketahui pada masa jalan. Percubaan untuk memanggil kaedah ini dengan pembolehubah jenis Jenis menghasilkan ralat pengkompil:
<code>找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)</code>
Untuk menyelesaikan masalah ini, kita boleh menggunakan refleksi untuk memanggil kaedah generik dengan parameter jenis yang diperlukan. Begini cara kita boleh melakukannya:
<code class="language-csharp">Type t = entity.GetType(); MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });</code>
Bagaimanapun, pendekatan ini kurang cekap dan sukar untuk dikekalkan. Oleh itu, secara amnya disyorkan untuk mentakrifkan kaedah generik sedemikian rupa sehingga parameter jenis diluluskan sebagai hujah. Ini membolehkan kami mengekalkan keselamatan jenis masa kompilasi sambil masih menggunakan inferens jenis dinamik yang diperlukan pada masa jalan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Jenis Pembolehubah sebagai Parameter dalam Kaedah Generik C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!