Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencipta Contoh Jenis Generik dengan Pembina dalam C#?

Bagaimanakah Saya Boleh Mencipta Contoh Jenis Generik dengan Pembina dalam C#?

Patricia Arquette
Lepaskan: 2025-01-22 13:42:11
asal
1044 orang telah melayarinya

How Can I Create Instances of Generic Types with Constructors in C#?

Mencipta contoh jenis generik menggunakan pembina dalam C#

Dalam C#, menggunakan pembina untuk mencipta objek baharu jenis generik boleh menjadi satu cabaran. Pertimbangkan senario berikut:

// 创建类型为T的对象列表
public static string GetAllItems<T>() where T : new()
{
    ...
    List<T> tabListItems = new List<T>();

    // 尝试使用构造函数参数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(new T(listItem)); // 错误!
    }
    ...
}
Salin selepas log masuk

Apabila cuba menyusun kod ini, anda mungkin menghadapi ralat pengkompil yang menyatakan bahawa hujah tidak boleh diberikan semasa membuat kejadian pembolehubah T. Ini kerana kekangan new() hanya membenarkan penciptaan objek tanpa parameter.

Penyelesaian: Gunakan fungsi

Untuk mengatasi had ini, anda boleh menyediakan parameter yang membolehkan objek dibuat berdasarkan parameter. Penyelesaian yang mudah ialah menggunakan fungsi:

public static string GetAllItems<T>(..., Func<ListItem, T> del)
{
    ...
    List<T> tabListItems = new List<T>();

    // 使用提供的函数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(del(listItem));
    }
    ...
}
Salin selepas log masuk

Fungsi panggilan

Untuk menggunakan fungsi ini, anda memanggilnya seperti berikut:

GetAllItems<Foo>(..., l => new Foo(l));
Salin selepas log masuk

Pendekatan ini membolehkan anda mencipta objek baharu jenis generik dengan pembina, walaupun dalam fungsi generik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Contoh Jenis Generik dengan Pembina dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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