首頁 > 後端開發 > C++ > 建立物件時如何將參數傳遞給 C# 通用 `new()` 約束?

建立物件時如何將參數傳遞給 C# 通用 `new()` 約束?

Linda Hamilton
發布: 2025-01-22 13:52:18
原創
677 人瀏覽過

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

向 C# 泛型模板類型的 new() 傳遞參數

在清單擴充期間嘗試使用其建構函式建立泛型類型 T 的新物件時,您可能會遇到編譯錯誤,聲稱「T:在建立變數實例時無法提供參數」。

此錯誤是因為您嘗試為使用「new」標誌約束的泛型類型呼叫帶有參數的建構函數,該標誌僅允許實例化沒有建構函數參數的物件。

解:

要建立具有建構函數參數的泛型類型的對象,您需要刪除「new」約束,而是提供一個委託,該委託可以根據指定的參數建立對象。以下是一個範例:

<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>
登入後複製

此函數接受一個委託 del,它將 ListItem 作為參數並傳回類型為 T 的物件。然後,您可以呼叫此函數並將 lambda 表達式作為委託傳遞,以建立具有必要參數的所需類型的物件:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
登入後複製

透過使用委託,您可以為要建立的物件提供自訂初始化邏輯,同時仍保持泛型程式設計的靈活性。

以上是建立物件時如何將參數傳遞給 C# 通用 `new()` 約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板