1

我创建了这个模型;

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

存储库找到数据并添加它。如我所见,我已经实例化了 returnModels

4

6 回答 6

9

returnModels被初始化。

returnModels.allGantt不是。

你可以这样做:

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

或者其他的东西。

于 2013-04-18T11:21:56.757 回答
1

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

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

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

}
于 2013-04-18T11:23:42.260 回答
1

当您尝试添加时,returnModels.allGantt 为 null。

在 gantModels 的构造函数中创建 List 的实例或

在添加调用之前

returnModels.allGantt = new List<gantModel>();
于 2013-04-18T11:23:57.517 回答
1

您可以定义一个构造函数,因为Conrad 在 answer 中有它,或者您可以摆脱自动实现的属性并执行以下操作:

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

public IList<ganttModel> AllGantt
{
    get { return _allGantt; }
    set { _allGantt = value; }
}
于 2013-04-18T11:25:10.490 回答
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
            });
        }
    }
于 2013-04-18T11:27:09.357 回答
0

你需要初始化所有甘特图......

    private IList<ganttModel> _allGantt;
    public IList<ganttModel> allGantt { 
          get{ return _allGantt ?? (_allGantt = new new List<ganttModel>()); } 
          set{ _allGantt = value;} 
     }
于 2013-04-18T11:31:51.960 回答