請看下面的例子:爲什麼我不能使用兩個泛型類型參數的協方差?
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();'將解決你的情況。 –
AgentFire
2015-02-11 14:51:08