Не удается преобразовать обобщенный тип в тип интерфейса

Некий класс SomeClass имеет конструктор, который принимает делегат Action<ISomeInterface> в качестве параметра. Есть фабрика классов SomeFactory с обобщенным методом Create<T>...where T : ISomeInterface которая пытается создать указанный класс:

public class SomeFactory
{
    public SomeClass Create<T>(Action<T> action) where T : ISomeInterface
        // Не удается преобразовать из System.Action<T> в System.Action<Lambda_Generic_Study.ISomeInterface> 
        => new SomeClass(action); 
}
public class SomeClass
{
    public SomeClass(Action<ISomeInterface> action) { }
}
public interface ISomeInterface { }

Вопрос: Почему в данном случае не удается преобразовать из System.Action<T> в System.Action<Lambda_Generic_Study.ISomeInterface> если ограничение where T : ISomeInterface прямо предполагает что обобщенный тип реализует указанный интерфейс?

При этом, если я делаю конструктор SomeClass обобщенным, то код работает:

public class SomeFactory
{
    public SomeClass<T> Create<T>(Action<T> action) where T : ISomeInterface
        // OK!
        => new SomeClass<T>(action); 
}
public class SomeClass<T> where T : ISomeInterface
{
    public SomeClass(Action<T> action) { }
}
public interface ISomeInterface { }

Не совсем понятна логика


Ответы (0 шт):