Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghantar Argumen kepada Kekangan `new()` Generik C# Apabila Mencipta Objek?

Bagaimana untuk Menghantar Argumen kepada Kekangan `new()` Generik C# Apabila Mencipta Objek?

Linda Hamilton
Linda Hamiltonasal
2025-01-22 13:52:18719semak imbas

How to Pass Arguments to a C# Generic `new()` Constraint When Creating Objects?

Lepaskan parameter kepada new() jenis templat generik C#

Apabila cuba mencipta objek baharu jenis T generik menggunakan pembinanya semasa pengembangan senarai, anda mungkin menghadapi ralat kompilasi yang mendakwa "T: tidak boleh membekalkan hujah apabila mencipta contoh pembolehubah".

Ralat ini berlaku kerana anda cuba memanggil pembina dengan parameter untuk jenis generik yang dikekang menggunakan bendera "baharu", yang hanya membenarkan instantiasi objek tanpa parameter pembina.

Penyelesaian:

Untuk mencipta objek jenis generik dengan parameter pembina, anda perlu mengalih keluar kekangan "baharu" dan sebaliknya menyediakan perwakilan yang mencipta objek berdasarkan parameter yang ditentukan. Berikut ialah contoh:

<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 ini menerima perwakilan del yang mengambil ListItem sebagai parameter dan mengembalikan objek jenis T. Anda kemudian boleh memanggil fungsi ini dan lulus ungkapan lambda sebagai perwakilan untuk mencipta objek jenis yang diperlukan dengan parameter yang diperlukan:

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

Dengan menggunakan perwakilan, anda boleh menyediakan logik pemulaan tersuai untuk objek yang anda ingin buat sambil mengekalkan fleksibiliti pengaturcaraan generik.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Argumen kepada Kekangan `new()` Generik C# Apabila Mencipta Objek?. 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