2013-09-05 49 views
0

我是新手編程,這可能是一個簡單的問題,但我似乎無法弄清楚。我有以下2班在我的計劃:如何更正以下代碼中的NullReferenceException?

public class TrackingObject 
{ 
public int OrderId { get; set; } 
public int ProjectCount { get; set; } 
public IList<ProjectInfo> Projects { get; set; } 
} 

public class ProjectInfo 
{ 
public int ProjectId { get; set; } 
public string ProjectType { get; set; } 
public int ImageCount { get; set; } 
} 

爲了測試我創建了一個控制檯應用程序,並用下面的代碼:

static void Main(string[] args) 
{ 
    TrackingObject oTracking = new TrackingObject(); 
    ProjectInfo pInfo = new ProjectInfo(); 

    oTracking.OrderId = 1; 
    oTracking.ProjectCount = 1; 
    pInfo.ProjectId = 1; 
    pInfo.ProjectType = "CANVAS"; 
    pInfo.ImageCount = 1; 
    oTracking.Projects.Add(pInfo); 

    Console.WriteLine(oTracking.Projects.Count); 
    Console.ReadLine();  
} 

當我運行它拋出一個NullReferenceException是未處理的應用以下行:

oTracking.Projects.Add(pInfo); 

我明白知道異常是因爲oTracking.Projects是NULL。什麼是正確的方式來完成我所嘗試的?任何指導將非常感激。

回答

5

添加項目之前添加oTracking.Projects = new List<ProjectInfo>()

+4

在TrackingObject的構造函數中執行此操作 – stevepkr84

+0

謝謝你們。我不能相信我錯過了那麼基本的東西。如果我的代表足夠高,我會投你一票。 – Dreampoet

0

Projects需要進行初始化:

oTracking.Projects = new List<ProjectInfo>(); 
1

檢查的對象,如果null,如果是分配一個新的實例:

if (oTracking.Projects == null) { 
    oTracking.Projects = new List<ProjectInfo>(); 
} 
2

I4V的回答和對回答的第一個評論的組合:

public class TrackingObject 
{ 
    public int OrderId { get; set; } 
    public int ProjectCount { get; set; } 
    public IList<ProjectInfo> Projects { get; set; } 

    public TrackingObject() { 
     this.Projects = new List<ProjectInfo>(); 
    } 

    //This constructor optional, but since you're using an IList, may as well 
    //let the user pass in an IList of a different type if they chose 
    public TrackingObject(IList<ProjectInfo> defaultList) { 
     this.Projects = defaultList; 
    } 
} 
0
static void Main(string[] args) 
{ 
TrackingObject oTracking = new TrackingObject(); 
ProjectInfo pInfo = new ProjectInfo(); 

oTracking.OrderId = 1; 
oTracking.ProjectCount = 1; 
pInfo.ProjectId = 1; 
pInfo.ProjectType = "CANVAS"; 
pInfo.ImageCount = 1; 
oTracking.Projects = new List<ProjectInfo>(); 
oTracking.Projects.Add(pInfo); 

Console.WriteLine(oTracking.Projects.Count); 
Console.ReadLine();  
}