向 C# 泛型模板类型的 new()
传递参数
在列表扩展期间尝试使用其构造函数创建泛型类型 T 的新对象时,您可能会遇到编译错误,声称“T:在创建变量实例时无法提供参数”。
此错误是因为您尝试为使用“new”标志约束的泛型类型调用带有参数的构造函数,该标志仅允许实例化没有构造函数参数的对象。
解决方案:
要创建具有构造函数参数的泛型类型的对象,您需要删除“new”约束,而是提供一个委托,该委托可以根据指定的参数创建对象。以下是一个示例:
public static string GetAllItems<T>(..., Func<ListItem, T> del) { ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(del(listItem)); } ... }
此函数接受一个委托 del
,它将 ListItem 作为参数并返回类型为 T 的对象。然后,您可以调用此函数并将 lambda 表达式作为委托传递,以创建具有必要参数的所需类型的对象:
GetAllItems<Foo>(..., l => new Foo(l));
通过使用委托,您可以为要创建的对象提供自定义初始化逻辑,同时仍然保持泛型编程的灵活性。
以上是创建对象时如何将参数传递给 C# 通用 `new()` 约束?的详细内容。更多信息请关注PHP中文网其他相关文章!