我正在尝试在添加到列表时通过其构造函数创建类型为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.
}
...
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个泛型类,其中new是泛型类的实例.如下:
public class HomepageCarousel<T> : List<T>
where T: IHomepageCarouselItem, new()
{
private List<T> GetInitialCarouselData()
{
List<T> carouselItems = new List<T>();
if (jewellerHomepages != null)
{
foreach (PageData pageData in jewellerHomepages)
{
T item = new T(pageData); // this line wont compile
carouselItems.Add(item);
}
}
return carouselItems;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
在创建变量类型的实例时无法提供参数
我发现了以下与我需要的相关的问题:将 参数传递给模板化类型的C#generic new()
但是,我不能使用Jared建议的答案,因为我在Generic类中调用方法,而不是在它之外,所以我不能指定具体的类.
有没有解决的办法?
我已根据另一个问题尝试了以下内容,但它不起作用,因为我不知道要指定的具体类型.从泛型类中调用它,而不是在外面调用:
public class HomepageCarousel<T> : List<T>
where T: IHomepageCarouselItem, new()
{
private List<T> LoadCarouselItems()
{
if (IsCarouselConfigued)
{
return GetConfiguredCarouselData();
}
// ****** I don't …Run Code Online (Sandbox Code Playgroud) 我有一组对象,我作为参数传递给另一种类型的对象(一对一).我在很多地方这样做(基本上是从数据对象转换为业务对象).我想写一个通用的扩展方法来实现这一目标.但我被卡住了,因为我不知道如何指定业务对象具有将数据对象作为参数的构造函数的约束.以下是我的功能代码:
public static IList<T> ConvertTo<A,T>(this IEnumerable<A> list)
where T : new(A)/*THIS IS PROBLEM PART*/
{
var ret = new List<T>();
foreach (var item in list)
{
ret.Add(new T(item));
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)