在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中文网其他相关文章!