Не удается преобразовать обобщенный тип в тип интерфейса
Некий класс 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 { }
Не совсем понятна логика