向 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中文網其他相關文章!