无法隐式转换System.Collections.Generic.List类型

时间:2015-09-11 02:57:18

标签: c# asp.net linq list

  

例外:无法隐式转换类型' 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 都可以接受,但是我不可能接受两个回答,所以我接受了一个回答并且提出了休息。

3 个答案:

答案 0 :(得分:3)

XMailerData.CompositeModel.PageContentModelClasses.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');