【问题标题】:Unable to cast object of type 'System.Collections.Generic.List to type 'System.Collections.Generic.ICollection无法将“System.Collections.Generic.List”类型的对象转换为“System.Collections.Generic.ICollection”类型
【发布时间】:2022-01-14 22:29:56
【问题描述】:

我正在尝试将数据分配给一个类,但是在执行该方法时它向我显示错误:

Unable to cast object of type 'System.Collections.Generic.List to type 'System.Collections.Generic.ICollection

我正在做的程序如下:

我有 TicketData 类,它的字段中有一个 Message 类的 ICollection。

public partial class TicketData
{
    public int IdTicket { get; set; }
    public int? IdUser { get; set; }
    public ICollection<Message> Message { get; set; }
}

要将值分配给 TicketData 类,我获取 Ticket 和 Message 类的值。

public class Ticket
{
    public int IdTicket { get; set; }
    public int? IdUser { get; set; }
}

public class Message
{
    public int IdTicket { get; set; }
    public int? IdMessage { get; set; }
    public string Text { get; set; }
}

我用以下方法做到这一点:

var detail = await _unitOfWork.TicketsRepository.GetDetailsTicketRepository(Id);

var messageService = await _unitOfWork.MessageRepository.GetMessagesTicketRepository(Id);

List<VMessages> listMessages = messageService.ToList();

VMessages 内部与 Message 类相同。

然后我手动分配值:

var TData = new TicketData()
{
    IdTicket = detail.IdTicket,
    IdUser = detail.IdUser,
    Message = (ICollection<Message>)listMessages
};

但这就是它向我显示上述错误的地方。如果我只分配 IdTicket 和 IdUser 的值,它可以正常工作,但是当我将 listMessages 分配给 Message 时,它​​会显示错误。

请你告诉我我哪里失败了,谢谢。

【问题讨论】:

  • (如果 VMessages 和 Message 是某种模型/视图模型对,享受从一个到另一个的简单映射,我想说这些天的典型路线是使用一些软件,如 automapper 来映射从一个到另一个)

标签: c# linq .net-5


【解决方案1】:

虽然VMessage 可能包含与Message 相同的成员,但它们是不同且不相关的类型,因此您不能在C# 中转换到另一个。

您需要做的是将每个VMessage转换为Message。

一种方法是使用 LINQ:

var convertMessages = listMessages.Select(x => new Message
{
    IdTicket = x.IdTicket,
    IdMessage = x.IdMessage,
    Text = x.Text,
});

var TData = new TicketData()
{
    IdTicket = detail.IdTicket,
    IdUser = detail.IdUser,
    Message = convertMessages.ToArray(),
};

如果这是您需要定期执行的操作,您始终可以使用基于反射的映射 API 来减少样板代码。

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 2016-02-10
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2015-09-14
    相关资源
    最近更新 更多