没有装箱或类型参数转换

svi*_*lta 5 c# generics polymorphism inheritance list

我收到以下错误:

错误1类型'T'不能用作通用类型或方法'ClassLibrary1.A'中的类型参数'T'。没有从“ T”到“ ClassLibrary1.ALayer”的装箱或类型参数转换。

我正在尝试应用泛型来实现具有列表和继承的动态多态性。我具有以下类结构:

public abstract class ALayer
{
    public int Id { get; set; }
}

public abstract class A<T> where T: ALayer
{
    public List<T> Layers;
}
Run Code Online (Sandbox Code Playgroud)

我在中产阶级的声明中出现错误

public abstract class Middle<T>:A<T>
{
    public int middleAttr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我希望获得动态多态性的第三层课程

public class BLayer : ALayer
{
    public int Id { get; set; }
}

public class B:Middle<BLayer>
{
    public B() {
        this.Layers = new List<BLayer>();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是什么错误?

任何帮助都感激不尽

回答 我必须明确命名约束

public abstract class Middle<T>:A<T> where T: ALayer
{
    public int middleAttr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

svi*_*lta 7

我必须明确命名对中产阶级的约束

public abstract class Middle<T>:A<T> where T: ALayer
{
    public int middleAttr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)