对象初始化,为什么要调用集合初始值设定项

时间:2013-09-28 21:13:38

标签: c# asp.net-mvc-4 entity-framework-5

首先,我知道每个下拉列表都应该在它们自己的ViewModel中分开,最好是在局部视图中发出。

但是,如果您可以帮助我解决以下问题,这将告诉我为什么我在设计时使用我的超类中的两个类进行编译时遇到问题(因为我需要在同一个视图中使用它们) 。

如果我有一个如下所述的超类:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using YeagerTechModel.DropDownLists;

namespace YeagerTechModel.ViewModels
{
    [DataContract]
    [Serializable]
    public partial class CustomerProjectDDL
    {
        [DataMember]
        public Customer Customer = new Customer();
        [DataMember]
        public ProjectName ProjectName = new ProjectName();
    }
}

和ProjectName类的定义如下:

namespace YeagerTechModel.DropDownLists

    {
        [DataContract]
        [Serializable]
        public partial class ProjectName
        {
            [DataMember]
            public Int16 ProjectID { get; set; }
            [DataMember]
            public String Name { get; set; }
        }
    }

当我尝试使用上述方法时,我在我的方法中得到了设计时编译错误: 新声明后面的左大括号: "无法初始化类型' YeagertechModel.ViewModels.CustomerProjectDDL'使用集合初始值设定项,因为它没有实现IENumerable。"

public List<CustomerProjectDDL> GetProjectNameDropDownListVM()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    var project = DbContext.Projects.Where(w => w.ProjectID > 0).Select(s =>
                        new CustomerProjectDDL()
                        {
                            ProjectName.ProjectID = s.ProjectID,
                            ProjectName.Name = s.Name
                        });


                    List<CustomerProjectDDL> myProjects = new List<CustomerProjectDDL>();

                    myProjects = project.ToList();

                    return myProjects;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

2 个答案:

答案 0 :(得分:1)

如果您可以使用这样的语法

,它将起作用
    new CustomerProjectDDL()
    {
        ProjectName = {ProjectID = s.ProjectID, Name = s.Name}
    });

这与对象初始化有关,特别是与初始化顺序有关。但是,我无法理解为什么会发生这种情况,因为对象初始化程序首先调用默认构造函数,然后才分配值。据我所知,在对象初始化期间,实例fiels在构造函数被调用之前被初始化,因此ProjectName属性应该在您尝试在对象初始值设定项中访问它时初始化

答案 1 :(得分:0)

你能改变吗?

  var project = DbContext.Projects.Where(w => w.ProjectID > 0).Select(s =>
                    new CustomerProjectDDL()
                    {
                        ProjectName.ProjectID = s.ProjectID,
                        ProjectName.Name = s.Name
                    });

  var project = DbContext.Projects.Where(w => w.ProjectID > 0).Select(s =>
                    new CustomerProjectDDL
                    {
                        ProjectName = s
                    });