无法将类型为“System.Collections.Generic.List 的对象转换为类型为“System.Collections.Generic.ICollection
Unable to cast object of type 'System.Collections.Generic.List to type 'System.Collections.Generic.ICollection
我正在尝试将数据分配给 class,但在执行该方法时显示错误:
Unable to cast object of type 'System.Collections.Generic.List to type 'System.Collections.Generic.ICollection
我正在做的程序如下:
我有 TicketData class,它的字段中有一个消息的 ICollection class。
public partial class TicketData
{
public int IdTicket { get; set; }
public int? IdUser { get; set; }
public ICollection<Message> Message { get; set; }
}
给TicketData赋值class我获取Ticket和Message的值class.
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 内部与 class 消息相同。
然后我手动赋值:
var TData = new TicketData()
{
IdTicket = detail.IdTicket,
IdUser = detail.IdUser,
Message = (ICollection<Message>)listMessages
};
但这就是它向我显示上述错误的地方。如果我只分配 IdTicket 和 IdUser 的值它工作正常,但是当我将 listMessages 分配给 Message 时它显示错误。
请你告诉我我失败的地方,谢谢。
尽管 VMessage
可能包含与 Message
相同的成员,但它们是不同且不相关的类型,因此您不能 cast 从一个到另一个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 来减少样板文件。
我正在尝试将数据分配给 class,但在执行该方法时显示错误:
Unable to cast object of type 'System.Collections.Generic.List to type 'System.Collections.Generic.ICollection
我正在做的程序如下:
我有 TicketData class,它的字段中有一个消息的 ICollection class。
public partial class TicketData
{
public int IdTicket { get; set; }
public int? IdUser { get; set; }
public ICollection<Message> Message { get; set; }
}
给TicketData赋值class我获取Ticket和Message的值class.
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 内部与 class 消息相同。
然后我手动赋值:
var TData = new TicketData()
{
IdTicket = detail.IdTicket,
IdUser = detail.IdUser,
Message = (ICollection<Message>)listMessages
};
但这就是它向我显示上述错误的地方。如果我只分配 IdTicket 和 IdUser 的值它工作正常,但是当我将 listMessages 分配给 Message 时它显示错误。
请你告诉我我失败的地方,谢谢。
尽管 VMessage
可能包含与 Message
相同的成员,但它们是不同且不相关的类型,因此您不能 cast 从一个到另一个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 来减少样板文件。