尝试创建列表的通用实现。我的班级将是:
public class SpecialList <T>
{
private List <T> mylist;
public void SpecialList <T>()
{
mylist = new List <T>()
}
}
此代码无法编译b / c“无法隐式转换类型....列表到...列表...”我错过了什么?
答案 0 :(得分:8)
这一行存在两个问题:
public void SpecialList <T>()
首先,当我怀疑你希望它是一个构造函数时,你声明一个带有void
返回类型的方法。
其次,它是一个泛型方法 - 它引入了一个与现有类型参数无关的新类型参数T
。这就是转换不起作用的原因。想象一下它写成:
public void MyGenericMethod<TOther>()
{
List<T> x = new List<TOther>();
}
...那么这显然是错的,是吗?
你只需要这样的构造函数:
public SpecialList()
{
...
}
(作为旁注,通常情况下,类型参数不会像空格那样用空格分隔。例如,它通常是List<T>
而不是List <T>
。值得改变你的习惯,以配合大多数人使用的惯例。)
答案 1 :(得分:4)
你的课应该是
public class SpecialList <T>
{
private List <T> mylist;
public SpecialList()
{
mylist = new List <T>();
}
}
当然如果你的类看起来像一个集合,你可能想要实现一个或多个集合接口,例如
public class SpecialList <T> : ICollection<T>
{
private List <T> mylist;
public SpecialList()
{
mylist = new List <T>();
}
// ICollection<T>.Add
public void Add(T item)
{
// delegate to myList
myList.Add(item);
}
... /Clear/Contains/CopyTo/ etc
}
答案 2 :(得分:2)
问题是<{1>} <\ n> <
void SpecialList<T>()
答案 3 :(得分:1)
那是因为您无法使用任何通用参数定义构造函数。 你可以做的只是删除通用的特定代码。
public class SpecialList <T>
{
private List <T> mylist;
public SpecialList()
{
mylist = new List <T>();
}
}
答案 4 :(得分:1)
构造函数中不需要 T 。
它使编译器认为它是类上使用的 T 以外的类型。
这就是为什么它说不能将它从 List (其中 T 来自类)转换为 List (其中 T < / em>来自构造函数)。