无法将类型为"System.Collections.Generic.List"的对象强制转换为类型"System.Collections.Generic.ICollection



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

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 and 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时,它会显示错误。

请你告诉我哪里不及格,谢谢。

尽管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来减少样板。

相关内容

最新更新