我正在嘗試將資料分配給一個類,但是在執行該方法時,它向我顯示了錯誤:
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 時,它??會顯示錯誤。
請你告訴我我失敗的地方,謝謝。
uj5u.com熱心網友回復:
雖然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 來減少樣板。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/380052.html
