无法将类型“System.Collections.Generic.List< >”隐式转换为“System.Collec
本文关键字:System Collec 转换 List 类型 Collections Generic | 更新日期: 2023-09-27 18:27:20
这篇文章有很多可能的重复。但是我尝试了其中的大多数,不幸的是我的错误仍然发生。
错误是:错误 1 无法将类型
'System.Collections.Generic.List<Report.Business.ViewModels.InvoiceMaster>'
隐式转换为'System.Collections.Generic.IList<ICSNew.Data.InvoiceHD>'
。存在显式转换(您是否缺少强制转换?
public IList<InvoiceHD> GetAllInvoiceMasterDetailsByInvoiceId(int InvoiceId)
{
var dbMstDtl = ireportrepository.GetAllInvoiceMasterDetailsByInvoiceId(InvoiceId);
var MstDtl = from mst in dbMstDtl
select new Report.Business.ViewModels.InvoiceMaster
{
ModifiedDate = mst.ModifiedDate,
SubTotal = Convert.ToDecimal(mst.SubTotal),
TotalDiscount = Convert.ToDecimal(mst.TotalDiscount),
VAT = Convert.ToDecimal(mst.VAT),
NBT = Convert.ToDecimal(mst.NBT),
AmtAfterDiscount = Convert.ToDecimal(mst.AmtAfterDiscount)
};
return MstDtl.ToList();
}
在某篇文章中,当他们使用返回 MstDtl.AsEnumerable(( 时,我看到这个问题解决了。ToList((;
但就我而言,它也不起作用(出现错误(
假设InvoiceMaster
派生自或实现InvoiceHD
,并且您使用的是 C# 4 和 .NET 4 或更高版本,则可以只使用泛型差异:
return MstDtl.ToList<InvoiceHD>();
这利用了IEnumerable<InvoiceMaster>
是IEnumerable<InvoiceHD>
的事实,因为IEnumerable<T>
在T
中是协变的。
解决该问题的另一种方法是将MstDtl
声明更改为使用显式类型:
IEnumerable<InvoiceMaster> MstDtl = ...;
(我还建议遵循常规 C# 命名,其中局部变量以小写字母开头,但那是另一回事。
您返回了错误的类型。您的方法签名表示您正在返回InvoiceHD
的集合,但您实际上返回的是InvoiceMaster
的集合
您返回了错误的类型
如果 InvoiceHD 是 Report.Business.ViewModels.InvoiceMaster 的子类型:
MstDtl.Cast<InvoiceHD>().ToList()
或者,如果ICSNew.Data.InvoiceHD不是从Report.Business.ViewModels.InvoiceMaster派生的,那么您可以手动映射数据:
var MstDtl = from mst in dbMstDtl
select new InvoiceHD //return InvoiceHD instead of Report.Business.ViewModels.InvoiceMaster
{
ModifiedDate = mst.ModifiedDate,
SubTotal = Convert.ToDecimal(mst.SubTotal),
TotalDiscount = Convert.ToDecimal(mst.TotalDiscount),
VAT = Convert.ToDecimal(mst.VAT),
NBT = Convert.ToDecimal(mst.NBT),
AmtAfterDiscount = Convert.ToDecimal(mst.AmtAfterDiscount)
}
或将函数的返回类型从 InvoiceHD 更改为
public IList<Report.Business.ViewModels.InvoiceMaster> GetAllInvoiceMasterDetailsByInvoiceId(int InvoiceId)