2013-04-18 17 views
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; 
     }  
    } 
} 

的复位器发现的数据,并将其添加。正如我所看到的,我已经instaniate的returnModels已经

+0

'returnModels。 allGantt'永远不会被实例化... – leppie

+0

但是它不属于“returnModels”?我是否必须在班级中安排所有下层变量? – Tim

+0

@Tim是的。引用类型的默认值是'null'。接口以及类和委托被声明为引用类型。 –

回答

9

returnModels被初始化。

returnModels.allGantt不是。

你可以这样做:

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

什么的。

+0

啊,我明白了......对不起......这真的很愚蠢,我盯着主要数据类型:/ – Tim

1

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

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

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

} 
1

returnModels.allGantt in null当您尝试添加到它。

无论是在gantModels的构造函数或

添加调用之前创造名单的实例

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

您可以定义构造函数为Conrad has it in the answer,或者你可以摆脱自动实现的属性的做:

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

public IList<ganttModel> AllGantt 
{ 
    get { return _allGantt; } 
    set { _allGantt = value; } 
} 
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 
      }); 
     } 
    } 
0

你需要用来初始化allGantt ....

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

单身人士在哪里? – Maarten

+0

我的错误..谢谢指出我错误 –

相关问题