【发布时间】:2015-02-11 23:02:28
【问题描述】:
考虑以下示例:
class Base {}
class Derived : Base {}
class Test1
{
private List<Derived> m_X;
public IEnumerable<Base> GetEnumerable()
{
return m_X;
}
}
这编译得很好,因为IEnumerable<T> 在T 中是协变。
但是,如果我做同样的事情,但现在使用泛型:
class Test2<TBase, TDerived> where TDerived : TBase
{
private List<TDerived> m_X;
public IEnumerable<TBase> GetEnumerable()
{
return m_X;
}
}
我得到编译器错误
无法转换表达式类型 'System.Collection.Generic.List' 返回类型 'System.Collection.Generic.IEnumerable'
我在这里做错了什么?
【问题讨论】:
-
我想必须有一个解释,但是,使用
return m_X.Cast<TBase>();会解决你的情况。
标签: c# generics covariance