У меня есть интерфейс IJob, из которого наследуются все классы Job, и у меня есть общий класс repo, который обработает все виды IJob.
Проблема im сталкивается с тем, что невозможно преобразовать Repository<Job1>
в Repository<IJob>
, хотя Job1
является типом IJob
.
код
internal class Program
{
public interface IJob { }
public class Job1 : IJob { }
public class Job2 : IJob { }
public class Repository<TJob>
where TJob : IJob
{
public List<TJob> GetJobs()
{
return new List<TJob>();
}
}
private static void Main(string[] args)
{
IJob iJob = new Job1(); // Valid
Repository<IJob> repo = new Repository<Job1>(); // Not Valid
}
}
Может кто-нибудь сообщить мне, почему это невозможно в С# и есть ли какие-либо другие преобразования типов правил в С# generics?