我想我可以通过 IList<ChildClass>
作为IEnumerable<ParentClass>
,因为显然 ChildType 列表中的每个对象也是 ParentType 的一个实例。但是编译器不喜欢我。我错过了什么?
编辑:添加了函数 Foo3 来完成我想要的。谢谢!
namespace StackOverflow
{
public class ParentClass
{
}
public class ChildClass : ParentClass
{
}
public class Test
{
// works
static void Foo(ParentClass bar2)
{
}
// fails
static void Foo2(IEnumerable<ParentClass> bar)
{
}
// EDIT: here's the right answer, obtained from the
// Charlie Calvert blog post
static void Foo3<T>(IEnumerable<T> bar) where T : ParentClass
{
}
public static void Main()
{
var childClassList = new List<ChildClass>();
// this works as expected
foreach (var obj in childClassList)
Foo(obj);
// this won't compile
// Argument '1': cannot convert from
// 'System.Collections.Generic.List<ChildClass>'
// to 'System.Collections.Generic.IEnumerable<ParentClass>'
Foo2(childClassList);
// EDIT: this works and is what I wanted
Foo3(childClassList);
}
}
}
最佳答案
关于c# - 为什么我不能将 IList<ChildType> 传递给 F(IEnumerable<ParentType>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632399/