gpt4 book ai didi

c# - 无法将 Type 隐式转换为 My Type

转载 作者:太空狗 更新时间:2023-10-29 21:35:06 27 4
gpt4 key购买 nike

我不确定这是否是协变和逆变问题,但我无法使其正常工作。这是代码:

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...
}
}

出于某种原因,我无法通过 PaginatedDto<PersonDto>作为PaginatedDto<IDto>ProcessDto方法。知道如何解决这个问题吗?

最佳答案

是的,这是一个差异问题。您需要创建一个接口(interface)(只有接口(interface)和委托(delegate)可以协变/逆变)IPaginatedDto<out TDto> Dtos在哪里不能有 setter(否则你不能使用 out ):

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>将实现这个接口(interface):

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; }
}

并在你的方法中使用接口(interface):

private static void ProcessDto(IPaginatedDto<IDto> paginatedDto)
{

//Do work...
}

关于c# - 无法将 Type<Food> 隐式转换为 My Type<IFood>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com