【问题标题】:Cannot implicitly convert type System.Collections.Generic.List无法隐式转换类型 System.Collections.Generic.List
【发布时间】:2015-12-07 12:02:00
【问题描述】:

异常: 无法将类型“System.Collections.Generic.List”隐式转换为 'System.Collections.Generic.List'

我不知道我犯了什么错误。这是我所遵循的结构:-

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;
        }
    }
}

在上面的类中,我试图返回一个 List,其中包含从 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; }
    }
}

在我的所有尝试中,我无法解决以下错误:-

异常:无法隐式转换类型 'System.Collections.Generic.List' 到 'System.Collections.Generic.List'

有人可以帮助我克服这个问题并承认我犯了什么错误,因此我得到了这种类型的错误。

结论:

感谢您的洞察力,这真的很有帮助。现在我已经修改了我的代码,它现在可以正常工作了。这是我现在所做的。

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 AghaeiMonroe ThomasNikita 分享建议。 Reza AghaeiMonroe Thomas 都可以接受,但无法接受两个答案,所以我接受一个答案并支持休息。

【问题讨论】:

  • 虽然XMailerData.CompositeModel.PageContentModelClasses.CompositeModel.PageContentModel 共享完全相同的属性,但它们是两种完全不同的类型。所以你应该转换(或构建)基于另一种类型的类型。
  • 好的,我一从办公室回来,我会检查它们是否在多个程序集中编译。 @Alizera 我尝试转换它但没有成功。

标签: c# asp.net linq list


【解决方案1】:

XMailerData.CompositeModel.PageContentModelClasses.CompositeModel.PageContentModel 具有相同的属性,但它们位于不同的命名空间中,这使得它们成为两个不同的类。 所以,Data 类应该引用 Classes.CompositeModel.PageContentModel 而不是 XMailerData.CompositeModel.PageContentModel

【讨论】:

    【解决方案2】:

    如果您无法更改代码以共享相同的 PageContentModel 类类型,如果属性兼容,您还可以尝试以下操作将一种类型的实例转换为另一种类型:

    lPageContent = iData.GetPageContent()
        .Select(content => new Classes.CompositeModel.PageContentModel
              {  
                  pageId = content.pageId,
                  contentId = content.contentId,
                  description = content.description
              })
        .ToList();
    

    【讨论】:

    • 感谢建议,下班回家试试。
    【解决方案3】:

    错误是自我描述的:

    Cannot implicitly convert type 
    'System.Collections.Generic.List<XMailerData.CompositeModel.PageContentModel>'
     to 'System.Collections.Generic.List<Classes.CompositeModel.PageContentModel>'
    

    看看命名空间。

    这两个类虽然同名同属性,但在不同的命名空间中,却不能隐式相互转换。

    lPageContent = iData.GetPageContent(); // 这里我得到一个错误

    在这里,您将类型为List&lt;XMailerData.CompositeModel.PageContentModel&gt;GetPageContent 方法的结果放入其类型为List&lt;Classes.CompositeModel.PageContentModel&gt;lPageContent

    您可以通过这种方式解决问题(Monroe Thomas 在他的好回答中也提到了这一点)

    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;
            }
        }
    }
    

    【讨论】:

    • 感谢建议,下班回家试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多