1

我需要创建一个泛型集合的泛型集合,它应该包含一个泛型类。我很努力,但没有找到任何答案。这就是我实现的集合的样子:https ://github.com/Infatum/PMC-Data-Model/blob/master/WTF/Position.cs这是泛型类 Point 的位置集合。我需要创建一个名为 Matrix 的 Positions 索引集合、名为 Container 的 Matrix 索引集合和一个名为 Containers 的 Container 索引集合。请帮我!

public class Matrix<T> : ICollection<T> where T : Position<T>
{
    protected ArrayList matrix;
    protected bool isReadOnly;

    public Matrix()
    {
        matrix = new ArrayList();
    }
// ...
}

问题:类型“T”不能用作泛型类型或方法“Position”中的类型参数“T”。没有从“T”到“WTF.Point”的隐式引用转换

这实际上是给我的任务:https ://docs.google.com/document/d/1ZYXXAjrh0OYNLUuFy0HT6ZuAzISIecE73cgA4QoRDlc/edit#heading=h.nwbuqfwpq3gk

4

1 回答 1

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>>给出我上面给出的解决方案(模数名称)。

于 2015-08-30T20:03:33.283 回答