将 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>()
.
我在用值填充对象时遇到问题。
其中一个属性是 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>()
.