La restricción genérica ignora la covarianza

Digamos que tenemos una interfaz como

public interface IEnumerable<out T>
{ /*...*/ }

es decircovariante enT.

Luego tenemos otra interfaz y una clase que lo implementa:

public interface ISomeInterface {}
public class SomeClass : ISomeInterface
{}

Ahora la covarianza nos permite hacer lo siguiente

IEnumerable<ISomeInterface> e = Enumerable.Empty<SomeClass>();

Entonces unIEnumerable<SomeClass> es asignable a una variable (o parámetro de método) de tipoIEnumerable<ISomeInterface>.

Pero si intentamos esto en un método genérico:

public void GenericMethod<T>(IEnumerable<T> p) where T : ISomeInterface
{
    IEnumerable<ISomeInterface> e = p;
    // or
    TestMethod(p);
}
public void TestMethod(IEnumerable<ISomeInterface> x) {}

obtenemos elerror del compilador CS0266 diciéndonos que unIEnumerable<T> no se puede convertir en unIEnumerable<ISomeInterface>.

La restricción establece claramente elT se deriva deISomeInterface, y desdeIEnumerable<T> es co-variante enT, esta asignación debería funcionar (como se muestra arriba).

¿Hay alguna razón técnica por la cual esto no puede funcionar en un método genérico? ¿O algo que me perdí que hace que sea demasiado costoso para el compilador resolverlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta