我需要创建一个泛型集合的泛型集合,它应该包含一个泛型类。我已经努力了,但是没有找到任何答案。这就是我的实现集合的样子:https://github.com/Infatum/PMC-Data-Model/blob/master/WTF/Position.cs这是泛型Point的位置集合。我需要创建一个名为Matrix的位置索引集合,Matrix的索引集合Container和一个名为Containers的容器索引集合。拜托,帮助我!
public class Matrix<T> : ICollection<T> where T : Position<T>
{
protected ArrayList matrix;
protected bool isReadOnly;
public Matrix()
{
matrix = new ArrayList();
}
// ...
}
麻烦:类型&#39; T&#39;不能用作类型参数&#39; T&#39;通用类型或方法&#39;位置&#39;来自&#39; T&#39;没有隐式参考转换。到&#39; WTF.Point&#39;
答案 0 :(得分:2)
T
上的类型约束是递归的 - 我认为你不希望这样做。 (编译器也没有:约束强制T
成为某种Position<T>
。这意味着Position<T>
实际上是Position<Position<T>>
- 这违反了对通用的类型约束Position
的参数,它预期WTF.Point
而不是Position
)
解决方案:
public class Matrix<T> : ICollection<Position<T>>
但是让我再详细说明一下: 从某种意义上说,你需要像
这样的东西public class Matrix<T> : ICollection<T> where T : Position<U>
所以没有更多的递归。您希望T
成为“某种Position
”。但现在我们会遇到一个新问题:U
(我们称之为“元素类型”)来自哪里?您应该使用 作为Matrix
的泛型类型参数:
public class Matrix<U> : ICollection<T> where T : Position<U>
现在,约束可以直接折叠到接口类型中,即ICollection<Position<U>>
完全给出我上面给出的解决方案(模数名称)。