ACTUALIZACIÓN: El siguiente código sólo tiene sentido en C# 4.0 (Visual Studio 2010)covarianza/contravarianza: cómo hacer el siguiente código compilar
Parece que estoy teniendo un mal entendido de la covarianza/cosa contravarianza . ¿Alguien puede decirme por qué el siguiente código no se compila?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
mientras éste compila: (!!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
@ Adam: Creo que estás equivocado, '' IEnumerable no es '' IEnumerable por defecto para que no se compile incluso en '3.5' –
sll
@AdamMihalcin: No, eso no lo haría código * * compilado antes de .NET 4. Lo he intentado solo para verificarlo. Sin invarianza genérica, la conversión de 'IEnumerable' a 'IEnumerable 'es simplemente inválida. –
buena llamada en TSuper, simplemente solucionado que –