c# - ¿Por qué la covarianza no funciona con el método genérico?
c#-4.0 covariance (1)
Supongamos que tengo interfaz y clase:
public interface ITree {}
public class Tree : ITree {}
Como IEnumerable<T>
es covariante , la siguiente línea de código se compila correctamente:
IEnumerable<ITree> trees = new List<Tree>();
Pero cuando lo pongo en método genérico:
public void Do<T>() where T : ITree
{
IEnumerable<ITree> trees = new List<T>();
}
Me compila el error del compilador:
Error 1 No se puede convertir implícitamente el tipo ''System.Collections.Generic.List'' a ''System.Collections.Generic.IEnumerable''. Existe una conversión explícita (¿falta una conversión?) D: / lab / Lab.General / Lab.General / Program.cs 83 40 Lab.General
¿Por qué la covarianza no funciona en este caso?
Esto se debe a que la varianza solo funciona con tipos de referencia (clases, interfaces y delegados). Agrega una restricción de clase y compila simplemente bien:
public static void Do<T>() where T : class, ITree