无法将MyType 隐式转换为MyType
我不确定这是否是Covariance和Contravariance问题,但我不能让这个工作。 这是代码:
public interface IDto { } public class PaginatedDto 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 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 { new PersonDto { }, new PersonDto { }, new PersonDto { }, }; var paginatedPersonDto = new PaginatedDto() { Dtos = people }; //ProcessDto doesn't accept this ProcessDto(paginatedPersonDto); } private static void ProcessDto(PaginatedDto paginatedDto) { //Do work... } }
出于某种原因,我不能将PaginatedDto
作为PaginatedDto
传递给ProcessDto
方法。 知道如何解决这个问题?
是的,这是一个差异问题。 你需要创建一个接口(只有接口和委托可以是共同/逆变) IPaginatedDto
其中Dtos
不能有一个setter(否则你不能使用):
public interface IPaginatedDto where TDto : IDto { int PageIndex { get; set; } int PageSize { get; set; } int TotalCount { get; set; } int TotalPageCount { get; set; } bool HasNextPage { get; set; } bool HasPreviousPage { get; set; } IEnumerable Dtos { get; } }
而你的PaginatedDto
将实现这个接口:
public class PaginatedDto : IPaginatedDto 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 Dtos { get; set; } }
并在您的方法中使用接口:
private static void ProcessDto(IPaginatedDto paginatedDto) { //Do work... }