我试图在添加到列表时通过其构造函数创建一个T类型的新对象。
我得到一个编译错误:错误消息是:
'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)); // error here.
}
...
}
为了在函数中创建泛型类型的实例,必须使用"new"标志约束它。
public static string GetAllItems<T>(...) where T : 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));
}
...
}
然后你可以这样称呼它
GetAllItems<Foo>(..., l => new Foo(l));