將建構子參數傳遞給 C# 中的泛型型別
在 C# 中使用參數化建構函式建立泛型類型的實例可能會帶來挑戰。 嘗試直接實例化通常會導致錯誤:「建立變數實例時無法提供參數」。這是因為編譯器在編譯時並不知道具體的建構函式簽章。
new()
限制僅允許無參數建構子。要處理帶有參數的建構函數,常見的解決方案涉及使用工廠方法(通常表示為委託)。
以下是實現此目標的方法:
不要直接實例化泛型類型,而是將委託(例如 Func
)傳遞給泛型方法。該委託將充當工廠,負責使用必要的建構函數參數來建立物件。
範例:
<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) { // ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(factoryMethod(listItem)); } // ... }</code>
此 GetAllItems
方法現在接受 Func<ListItem, T>
委託。 該委託接受 ListItem
作為輸入並傳回 T
類型的實例。
用法:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>
在此範例中,lambda 表達式 l => new Foo(l)
用作工廠方法。它需要一個 ListItem
(l
) 並使用它透過 Foo
的建構子建立一個新的 Foo
物件。 這有效地將 ListItem
參數傳遞給 Foo
建構子。
透過將物件建立邏輯與泛型方法本身分離,這種方法允許靈活地實例化泛型類型,即使是那些具有參數化建構函數的類型。
以上是在 C# 中實例化泛型類型時如何將參數傳遞給建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!