c# – 无法将MyType隐式转换为MyType
发布时间:2020-12-15 08:40:00 所属栏目:百科 来源:网络整理
导读:我不确定这是否是Covariance和Contravariance问题,但我不能让这个工作.这是代码: public interface IDto { }public class PaginatedDtoTDto where TDto : IDto { public int PageIndex { get; set; } public int PageSize { get; set; } public int TotalCo
我不确定这是否是Covariance和Contravariance问题,但我不能让这个工作.这是代码:
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 { },}; var paginatedPersonDto = new PaginatedDto<PersonDto>() { Dtos = people }; //ProcessDto doesn't accept this ProcessDto(paginatedPersonDto); } private static void ProcessDto(PaginatedDto<IDto> paginatedDto) { //Do work... } } 出于某种原因,我无法通过PaginatedDto< PersonDto>如PaginatedDto< IDto>到ProcessDto方法.知道如何解决这个问题? 解决方法
是的,这是一个差异问题.您需要创建一个接口(只有接口和委托可以是共同/逆变)IPaginatedDto< out TDto> Dtos不能有一个setter(否则你不能用完):
public interface IPaginatedDto<out TDto> 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<TDto> Dtos { get; } } 和你的PaginatedDto< TDto>将实现此接口: public class PaginatedDto<TDto> : IPaginatedDto<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; } } 并在您的方法中使用界面: private static void ProcessDto(IPaginatedDto<IDto> paginatedDto) { //Do work... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |