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
Lepaskan: 2025-01-22 13:52:18
asal
718 orang telah melayarinya

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

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

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!

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