У меня есть следующий обобщенный класс:Дженерики, как решить несовместимые общие ограничения типа
public class MyDbSetWrapper<T> : IDbSetWrapper<T>
where T : class, IEntity
{
}
Я хочу, чтобы создать новый экземпляр этого класса из GetSet
метода ниже. Ниже не компилируется, потому что MyDbSetWrapper
ожидает T
быть IEntity
, но TEntity
не ограничивается, чтобы быть в GetSet
методом IEntity
:
public IDbSetWrapper<TEntity> GetSet<TEntity>() where TEntity : class
{
return new MyDbSetWrapper<TEntity>();
}
Как GetSet
является реализация интерфейса третьей стороной, я m неспособно изменить общее ограничение на этот метод, чтобы включить IEntity
, хотя TEntity
всегда будет IEntity
.
Как создать новый экземпляр MyDbSetWrapper
из метода GetSet
?
Вы можете удалить ограничение типа IEntity и выполнить проверку времени выполнения, чтобы увидеть, что передаваемый тип реализует 'IEntity'. –
@YuvalItzchakov: Собственно, вы не можете; что не позволит вам использовать членов типа. – SLaks
@SLaks Это будет, но нужно ли OP использовать элементы типа? –