Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghantar Argumen kepada Pembina Generik dalam C# Menggunakan Kekangan `new()`?

Bagaimanakah Saya Boleh Menghantar Argumen kepada Pembina Generik dalam C# Menggunakan Kekangan `new()`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-22 13:57:11214semak imbas

How Can I Pass Arguments to a Generic Constructor in C# Using the `new()` Constraint?

Menggunakan new() kekangan dalam C# untuk menghantar parameter kepada pembina generik

Apabila menambah elemen pada senarai, cuba mencipta objek baharu jenis T dengan parameter pembina, anda mungkin menghadapi ralat kompilasi yang menyatakan bahawa parameter tidak boleh disediakan semasa membuat contoh pembolehubah. Ralat ini berlaku walaupun terdapat parameter pembina dalam kelas.

Untuk menyelesaikan masalah ini, new() kekangan jenis generik mesti digunakan. Walaupun kekangan ini membenarkan penciptaan contoh tanpa parameter, ia tidak mencukupi untuk kes di mana parameter pembina disertakan.

Alternatifnya ialah memperkenalkan parameter supaya objek dibuat berdasarkan parameter. Fungsi boleh mencapai ini dengan cekap.

<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 boleh dipanggil menggunakan ungkapan lambda yang mencipta objek baharu dengan parameter yang diperlukan:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Argumen kepada Pembina Generik dalam C# Menggunakan Kekangan `new()`?. 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