consideri il seguente esempio:Perché non posso usare la covarianza con due parametri di tipo generico?
class Base {}
class Derived : Base {}
class Test1
{
private List<Derived> m_X;
public IEnumerable<Base> GetEnumerable()
{
return m_X;
}
}
Questo compila bene, perché è IEnumerable<T>
covariant in T
.
Tuttavia, se faccio esattamente la stessa cosa, ma ora con i generici:
class Test2<TBase, TDerived> where TDerived : TBase
{
private List<TDerived> m_X;
public IEnumerable<TBase> GetEnumerable()
{
return m_X;
}
}
ottengo l'errore del compilatore
Impossibile convertire il tipo di espressione 'System.Collection.Generic.List' per restituire il tipo 'System.Collection.Generic.IEnumerable'
Cosa sto facendo di sbagliato qui?
Suppongo che ci sia una spiegazione, tuttavia, usando 'return m_X.Cast();' risolverà il tuo caso. –
AgentFire