尝试将元素添加到列表时,获取“对象引用未设置为实例”

时间:2013-04-18 11:19:48

标签: c# asp.net-mvc

我创建了这个模型;

namespace gantt.Models
{
    public class ganttModels
    {
        public IList<ganttModel> allGantt { get; set; }

    }

    public class ganttModel
    {
        public string projectName { get; set; }
        public IEnumerable<ResourcesSet> rescource { get; set; }
    }
}

现在我的计划是向这个模型添加项目,我已经在这样的存储库中完成了这个;

namespace gantt.Models
{
    public class GantDataRepository
    {
        GantEntities dbContext = new GantEntities();
        ganttModels returnModels = new ganttModels();
        ganttModel tempganttModel = new ganttModel();

        public GantDataRepository()
        {
            foreach (var item in dbContext.WorkPlans)
            {
                tempganttModel.projectName = item.Product;
                tempganttModel.rescource = item.ResourcesSets;
                returnModels.allGantt.Add(tempganttModel);   // Here i get the error     
            }   
        }

        public ganttModels getGant()
        {
            return returnModels;
        }    
    }
}

repositor找到数据并添加它。正如我所看到的那样,我已经实现了返回模型

6 个答案:

答案 0 :(得分:9)

returnModels已初始化。

returnModels.allGantt不是。

你可以这样做:

public class ganttModels
{
    public IList<ganttModel> allGantt { get; set; }
    public ganttModels()
    {
        allGantt = new List<ganttModel>();
    }
}

或其他什么。

答案 1 :(得分:1)

您没有在ganttModels Class中实例化您的列表。

public class ganttModels
{
    public ganttModels(){
      allGantt = new List<ganttModel>();      
    }

    public IList<ganttModel> allGantt { get; set; }

}

答案 2 :(得分:1)

当你尝试添加它时,

returnModels.allGantt为null。

在gantModels或

的构造函数中创建List的实例

在添加电话

之前
returnModels.allGantt = new List<gantModel>();

答案 3 :(得分:1)

您可以将构造函数定义为Conrad has it in the answer,也可以删除自动实现的属性并执行:

private IList<ganttModel> _allGantt = new List<ganttModel>();

public IList<ganttModel> AllGantt
{
    get { return _allGantt; }
    set { _allGantt = value; }
}

答案 4 :(得分:1)

您需要按如下方式定义ganttModels课程:

public class GanttModels // use correct casing!
{
    public GanttModels() { this.AllGantt = new List<GanttMode>(); }
    public IList<GanttModel> AllGantt { get; private set; }
}

您还在存储库中重复使用相同的引用,因此您应该这样做:

public class GantDataRepository
{
    GantEntities dbContext = new GantEntities();
    GanttModels returnModels = new GanttModels();

    public GantDataRepository()
    {
        foreach (var item in dbContext.WorkPlans)
        {
            returnModels.AllGantt.Add(new GanttModel 
            {
                ProjectName = item.Product,
                Rescource = item.ResourcesSets
            });
        }
    }

答案 5 :(得分:0)

你需要初始化一个甘特....

    private IList<ganttModel> _allGantt;
    public IList<ganttModel> allGantt { 
          get{ return _allGantt ?? (_allGantt = new new List<ganttModel>()); } 
          set{ _allGantt = value;} 
     }