在C#中使用建構子建立泛型類型的實例
在C#中,使用建構子建立泛型類型的新物件可能是一個挑戰。考慮以下場景:
<code class="language-csharp">// 创建类型为T的对象列表 public static string GetAllItems<T>() where T : new() { ... List<T> tabListItems = new List<T>(); // 尝试使用构造函数参数向列表添加对象 foreach (ListItem listItem in listCollection) { tabListItems.Add(new T(listItem)); // 错误! } ... }</code>
嘗試編譯此程式碼時,可能會遇到編譯器錯誤,指出在建立變數T的實例時無法提供參數。這是因為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>
呼叫函數
要使用此函數,您可以如下呼叫它:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>
這種方法可讓您建立具有建構函數的泛型類型的新對象,即使在泛型函數中也是如此。
以上是如何在 C# 中使用建構函式建立泛型類型的實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!