No estoy seguro de si esto es un problema de covarianza y contradicción, pero no puedo hacer que funcione. Aquí está el código:No se puede convertir implícitamente MyType <Foo> a MyType <IFoo>
public interface IDto { }
public class PaginatedDto<TDto> where TDto : IDto {
public int PageIndex { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public int TotalPageCount { get; set; }
public bool HasNextPage { get; set; }
public bool HasPreviousPage { get; set; }
public IEnumerable<TDto> Dtos { get; set; }
}
public class PersonDto : IDto {
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
class Program {
static void Main(string[] args) {
var people = new List<PersonDto> {
new PersonDto { },
new PersonDto { },
new PersonDto { },
};
var paginatedPersonDto = new PaginatedDto<PersonDto>() {
Dtos = people
};
//ProcessDto doesn't accept this
ProcessDto(paginatedPersonDto);
}
private static void ProcessDto(PaginatedDto<IDto> paginatedDto) {
//Do work...
}
}
Por alguna razón, no puedo dejar pasar PaginatedDto<PersonDto>
como PaginatedDto<IDto>
-ProcessDto
método. ¿Alguna idea de cómo puedo resolver este problema?
ah, mi estúpida cabeza! De hecho, lo intenté pero dejé el método como 'ProcessDto (PaginatedDto paginatedDto)' y, como esperaba, no funcionó. –
tugberk