将 List<IFoo> 替换为 List<Foo that implements IFoo>

Substituting List<IFoo> with List<Foo that implements IFoo>

我在用值填充对象时遇到问题。 其中一个属性是 List<IFoo> foos

稍后,当我想用​​我的数据库中的数据填充我的模型时,我想将 List<Foo> 放在那个 属性 上。

我认为既然 Foo 正确地实现了 IFoo 接口,这应该可以工作(对吗?)但是我收到一条错误消息,说我不能将 List<Foo> 隐式转换为 List<IFoo>

我想我正在看过去的东西... 感谢您提前提供帮助

给定类型 IFoo 和 Foo:

interface IFoo
{
}

class Foo : IFoo
{
}

可以 创建一个 List<IFoo>,填充 Foo 的实例并分配给 property/field/variable:

private List<IFoo> foos;

void GetFoos()
{
    foos = new List<IFoo> { new Foo() };
}

但是你不能List<Foo>分配给List<IFoo>:

foos = new List<Foo> { new Foo() };

简单地说,List<Sheep> 而不是 List<IAnimal>,即使每个 Sheep 都是 IAnimal。因为 List<IAnimal> 允许我 .Add(new BigBadWolf())List<Sheep> 永远不允许。

你可以做的是创建一个 new List<IAnimal> 通过调用 sheep.ToList<IAnimal>().