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
Patricia Arquetteasal
2025-01-22 13:42:111013semak imbas

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:

<code class="language-csharp">// 创建类型为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)); // 错误!
    }
    ...
}</code>

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:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> del)
{
    ...
    List<T> tabListItems = new List<T>();

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

Fungsi panggilan

Untuk menggunakan fungsi ini, anda memanggilnya seperti berikut:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>

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:
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