泛型类型中的C#多态

mat*_*att 5 c# generics polymorphism

class Base
{}

class Sub : Base
{}


void AddNewBase(Base t, LinkedList<Base> list){ ... }
...
{

    Sub asub = new Sub();

    LinkedList<Sub> asubList = new LinkedList<Sub>();
    AddNewBase(asub,asubList) // doesn't work
}
Run Code Online (Sandbox Code Playgroud)

基本上,我有一个自定义插入函数,它接受一个新项目和一个列表来放入它,它做了一些"排序"的东西,找到一个好的地方把它放在列表中.

问题是,我想基于'Base'中的属性来做这个,所以最好只有一个函数可以为所有子类型列表执行此操作.

我想我想要的是:

static void AddNewBase<T>(T t, LinkedList<T> list){ ... }
Run Code Online (Sandbox Code Playgroud)

但有一些澄清T的方式:'其中T是Base的子类'

dtb*_*dtb 9

您可以在类型参数上声明约束:

static void AddNewBase<T>(T t, LinkedList<T> list) where T : Base { ... }
Run Code Online (Sandbox Code Playgroud)