Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Kaedah Generik Secara Dinamik dengan Argumen Jenis Ditentukan Masa Jalan dalam C#?

Bagaimanakah Saya Boleh Menggunakan Kaedah Generik Secara Dinamik dengan Argumen Jenis Ditentukan Masa Jalan dalam C#?

Barbara Streisand
Lepaskan: 2024-12-30 19:09:13
asal
618 orang telah melayarinya

How Can I Dynamically Invoke Generic Methods with Runtime-Determined Type Arguments in C#?

Memanggil Kaedah Generik dengan Argumen Jenis Dinamik

Masalah

Dalam senario anda, anda ingin mengulangi koleksi antara muka dalam ruang nama tertentu dan menggunakan kaedah generik secara dinamik untuk setiap antara muka. Walau bagaimanapun, anda menghadapi ralat masa kompilasi disebabkan oleh argumen jenis yang tidak diketahui pada masa penyusunan.

Penyelesaian

Untuk memanggil kaedah generik secara dinamik dengan argumen jenis diketahui masa jalan, anda boleh menggunakan refleksi seperti berikut:

  1. Dapatkan maklumat kaedah generik: Gunakan kaedah Type.GetMethod untuk mendapatkan semula definisi kaedah generik.
  2. Janakan contoh kaedah generik: Panggil kaedah MakeGenericMethod pada definisi kaedah generik untuk menjana contoh kaedah khusus untuk hujah jenis yang diingini.
  3. Gunakan contoh kaedah generik: Gunakan kaedah Invoke untuk memanggil yang dijana contoh kaedah generik dengan hujah yang diperlukan.

Kod Contoh

using System;
using System.Linq;
using System.Reflection;

public class TestClass
{
    public static void CallGeneric<T>()
    {
        Console.WriteLine($"Generic type: {typeof(T)}");
    }

    public static void Main()
    {
        var assembly = Assembly.GetExecutingAssembly();

        var interfaces = assembly.GetTypes()
            .Where(t => t.Namespace == "MyNamespace.Interfaces");

        var genericMethod = typeof(TestClass).GetMethod("CallGeneric");

        foreach (var interfaceType in interfaces)
        {
            var genericMethodInstance = genericMethod.MakeGenericMethod(interfaceType);
            genericMethodInstance.Invoke(null, null); // No target or arguments needed
        }
    }
}
Salin selepas log masuk

Dalam contoh ini:

  • Kaedah CallGeneric ditakrifkan sebagai kaedah generik yang mencetak hujah jenis generik.
  • Kami mengambil semua jenis daripada ruang nama tertentu yang diwarisi daripada MyNamespace.Antaramuka.
  • Kami menggunakan refleksi untuk mendapatkan kaedah generik CallGeneric dan mencipta contoh kaedah generik untuk setiap jenis antara muka.
  • Kami menggunakan contoh kaedah generik tanpa sebarang sasaran atau hujah kerana ia adalah kaedah statik tanpa sebarang parameter.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Kaedah Generik Secara Dinamik dengan Argumen Jenis Ditentukan Masa Jalan dalam 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