例外:无法隐式转换类型' System.Collections.Generic.List< ModelClass>'至 '&System.Collections.Generic.List LT; ModelClass>'
我无法弄清楚我犯了什么错误。这是我所遵循的结构: -
namespace XMailerData.DAL
{
public class Data : IData, IDisposable
{
XmailerEntities context = new XmailerEntities();
public List<PageContentModel> GetPageContent()
{
List<PageContentModel> lPageContent = (from pc in context.T_PageContent
select new PageContentModel
{
contentId = pc.ContentId,
description = pc.Description
}).AsEnumerable().ToList();
return lPageContent;
}
}
}
在上面的课程中,我尝试返回包含 linq 表达式生成的结果的列表 PageContentModel 在同一名称空间中定义,但具有不同的类名。
namespace XMailerData.CompositeModel
{
public class PageContentModel
{
public int pageId { get; set; }
public int contentId { get; set; }
public string description { get; set; }
}
}
现在,在我的另一个名为 Classes 的类库中,我试图调用下面提到的那个函数
namespace Classes.Helper
{
public class DAL
{
public static List<PageContentModel> FetchPageContent()
{
IData iData;
List<PageContentModel> lPageContent = new List<PageContentModel>();
lPageContent = iData.GetPageContent(); // Here i'm getting an error
return lPageContent;
}
}
}
这里我试图将 iData.GetPageContent()的结果绑定到另一个类中定义的另一个列表,但我没有这样做。
namespace Classes.CompositeModel
{
public class PageContentModel
{
public int pageId { get; set; }
public int contentId { get; set; }
public string description { get; set; }
}
}
在我的所有尝试中,我无法解决以下错误: -
例外:无法隐式转换类型 &#39;&System.Collections.Generic.List LT; XMailerData.CompositeModel.PageContentModel&GT;&#39; 至 &#39;&System.Collections.Generic.List LT; Classes.CompositeModel.PageContentModel&GT;&#39;
有人可以帮助我克服这个问题并承认我犯了什么错误,因为我犯了这样的错误。
结论:
感谢您的洞察力,这真的很有帮助。现在我修改了我的代码,它现在正常工作。这就是我现在所做的。
namespace Classes.Helper
{
public class DAL
{
public static List<PageContent> FetchPageContent()
{
IData iData = new Data();
List<PageContent> lPageContent = new List<PageContent>();
lPageContent = iData.GetPageContent()
.Select(pc => new PageContent
{
pageId = pc.pageId,
contentId = pc.contentId,
description = pc.description,
}).ToList();
return lPageContent;
}
}
}
为避免歧义,我已将属性类从 PageContentModel 重命名为 PageContent 。感谢 Reza Aghaei , Monroe Thomas 和 Nikita 分享建议。 Reza Aghaei , Monroe Thomas 都可以接受,但是我不可能接受两个回答,所以我接受了一个回答并且提出了休息。
答案 0 :(得分:3)
XMailerData.CompositeModel.PageContentModel
和Classes.CompositeModel.PageContentModel
具有相同的属性,但它们位于不同的命名空间中,这使它们成为两个不同的类。
因此,课程Data
应该引用Classes.CompositeModel.PageContentModel
而不是XMailerData.CompositeModel.PageContentModel
。
答案 1 :(得分:2)
如果您无法更改代码以共享相同的PageContentModel类类型,那么如果属性兼容,您还可以尝试使用以下内容将一种类型的实例转换为另一种类型:
lPageContent = iData.GetPageContent()
.Select(content => new Classes.CompositeModel.PageContentModel
{
pageId = content.pageId,
contentId = content.contentId,
description = content.description
})
.ToList();
答案 2 :(得分:1)
错误是自我描述:
Cannot implicitly convert type
'System.Collections.Generic.List<XMailerData.CompositeModel.PageContentModel>'
to 'System.Collections.Generic.List<Classes.CompositeModel.PageContentModel>'
看看命名空间。
尽管这两个类具有相同的名称和相同的属性,但它们位于不同的名称空间中,它们不能隐式地相互转换。
lPageContent = iData.GetPageContent(); //我在这里收到错误
在这里,您要将GetPageContent
方法的结果显示为List<XMailerData.CompositeModel.PageContentModel>
类型为lPageContent
List<Classes.CompositeModel.PageContentModel>
,其类型为namespace Classes.Helper
{
public class DAL
{
public static List<Classes.CompositeModel.PageContentModel> FetchPageContent()
{
IData iData= new Data();
lPageContent = iData.GetPageContent()
.Select(x=>
new Classes.CompositeModel.PageContentModel()
{
pageId = x.pageId,
contentId = x.contentId,
description = x.description
}).ToList();
return lPageContent;
}
}
}
你可以用这种方式解决问题(门罗托马斯在他的好答案中也提到了这一点)
grad = ctx.createRadialGradient(0,0,radius*0.95, 0,0,radius*1.05);
grad.addColorStop(0, '#333');
grad.addColorStop(0.5, 'white');
grad.addColorStop(1, '#333');