Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Jenis Pembolehubah sebagai Parameter dalam Kaedah Generik C#?

Bagaimanakah Saya Boleh Menggunakan Jenis Pembolehubah sebagai Parameter dalam Kaedah Generik C#?

Linda Hamilton
Lepaskan: 2025-01-17 20:32:10
asal
938 orang telah melayarinya

How Can I Use a Variable's Type as a Parameter in a C# Generic Method?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan